# Name: smd_gallery v0.1 # Type: Client side plugin # A(nother) thumbnail gallery/slideshow creator with unreal flexibility # Author: Stef Dawson # URL: http://stefdawson.com/ # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YTo5OntzOjQ6Im5hbWUiO3M6MTE6InNtZF9nYWxsZXJ5IjtzOjY6ImF1dGhvciI7czoxMToi U3RlZiBEYXdzb24iO3M6MTA6ImF1dGhvcl91cmkiO3M6MjI6Imh0dHA6Ly9zdGVmZGF3c29u LmNvbS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjEiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjY5 OiJBKG5vdGhlcikgdGh1bWJuYWlsIGdhbGxlcnkvc2xpZGVzaG93IGNyZWF0b3Igd2l0aCB1 bnJlYWwgZmxleGliaWxpdHkiO3M6NDoiY29kZSI7czoyMzUwNDoiZnVuY3Rpb24gc21kX2dh bGxlcnkoJGF0dHMsICR0aGluZz0nJykgew0KCWdsb2JhbCAkcHJldGV4dCwgJHRoaXNhcnRp Y2xlLCAkaW1nX2RpcjsNCg0KCS8vICoqIExPT0tVUCBUQUJMRQ0KCS8vIEhvbGRzIGRhdGFi YXNlIGZpZWxkIGFzIGtleSBpbmRleCBhbmQgcGx1Z2luIG9wdGlvbiBuYW1lcyBhcyB2YWx1 ZS4NCgkvLyBVc2UgYXJyYXlfc2VhcmNoIHRvIGZpbmQgaWYgdmFsdWUgZXhpc3RzIGFuZCBy ZXR1cm4gY29ycmVjdCBrZXkgZm9yIHVzZSBpbiBkYiBjYWxscy9hcnJheSByZWZzLg0KCSRm aWVsZE1hcCA9IGFycmF5KA0KCQkibmFtZSIgPT4gIm5hbWUiLA0KCQkiaWQiID0+ICJpZCIs DQoJCSJhbHQiID0+ICJhbHQiLA0KCQkiY2FwdGlvbiIgPT4gImNhcHRpb24iLA0KCQkiY2F0 ZWdvcnkiID0+ICJjYXRlZ29yeSIsDQoJCSJhdXRob3IiID0+ICJhdXRob3IiLA0KCQkiZGF0 ZSIgPT4gImRhdGUiLA0KCQkiZXh0IiA9PiAiZXh0IiwNCgkJInciID0+ICJ3aWR0aCIsDQoJ CSJoIiA9PiAiaGVpZ2h0IiwNCgkpOw0KDQoJLy8gUGx1Z2luIG9wdGlvbnMNCglleHRyYWN0 KGxBdHRzKGFycmF5KA0KCQkndHlwZScgPT4gJ2ltYWdlJywNCgkJJ2RlbGltJyA9PiAnLCcs DQoJCSdwYXJhbWRlbGltJyA9PiAnOicsDQoJCSdmb3JtJyA9PiAnJywNCgkJJ2lkJyA9PiAn JywNCgkJJ2NhdGVnb3J5JyA9PiAnJywNCgkJJ2RpcmVjdG9yeScgPT4gJycsDQoJCSdtYXRj aCcgPT4gJycsDQoJCSdzdWJsZXZlbCcgPT4gJzAnLA0KCQknc29ydCcgPT4gJ2NhdGVnb3J5 JywNCgkJJ29mZnNldCcgPT4gJzAnLA0KCQknbGltaXQnID0+ICcwJywNCgkJJ21heGxpbWl0 JyA9PiAnOTk5OTknLA0KCQkndGh1bWJsaW1pdCcgPT4gJzk5OTk5JywNCgkJJ3RodW1ib2Zm c2V0JyA9PiAnMCcsDQoJCSd0aHVtYicgPT4gJzAnLA0KCQkndGh1bWJzaXplJyA9PiAnJywN CgkJJ3RleHQnID0+ICcnLA0KCQknY29sbGF0ZScgPT4gJycsDQoJCSdjb21ibycgPT4gJycs DQoJCSdwYWdlZm9ybScgPT4gJycsDQoJCSduYXZ3cmFwdGFnJyA9PiAndWwnLA0KCQknbmF2 YnJlYWsnID0+ICdsaScsDQoJCSduYXZjbGFzcycgPT4gJ3NtZF9nYWxsZXJ5X25hdicsDQoJ CSdnYWxsZXJ5aWQnID0+ICc/NDo2JywNCgkJJ3dyYXB0YWcnID0+ICcnLA0KCQknYnJlYWsn ID0+ICcnLA0KCQknY2xhc3MnID0+ICcnLA0KCQknZGVidWcnID0+ICcwJywNCgkpLCAkYXR0 cykpOw0KDQoJLy8gQ2F0ZWdvcnkgcmVsaWVzIG9uIHdoZXRoZXIgaWQgaGFzIGJlZW4gc3Bl Y2lmaWVkIG9yIG5vdC4NCgkvLyBsQXR0cygpIHdvbid0IGxldCB1cyBoYW5kbGUgdGhpcyBs b2dpYyBzbyBpdCBoYXMgdG8gYmUgZG9uZSBtYW51YWxseQ0KCSRjYXRlZ29yeSA9IGlzc2V0 KCRjYXRlZ29yeSkgPyBkb1NsYXNoKCRjYXRlZ29yeSkgOiAoKCRpZD09JycpID8gJHByZXRl eHRbJ2MnXTogJycpOw0KDQoJLy8gSGFuZGxlIGZvcm1zIGFuZCBzZXQgYSBkZWZhdWx0IHRh ZyBpZiBub25lIHNwZWNpZmllZA0KCSR0aGluZyA9IChlbXB0eSgkZm9ybSkpID8gJHRoaW5n IDogZmV0Y2hfZm9ybSgkZm9ybSk7DQoJJHRoaW5nID0gKGVtcHR5KCR0aGluZykpID8gJzxh IGhyZWY9Int1cmx9IiBhbHQ9InthbHR9Ij48dHhwOmltYWdlIGlkPSJ7aWR9IiAvPjwvYT4n IDogJHRoaW5nOw0KDQoJLy8gUGFnaW5nIGluaXQNCgkkcGFnaW5nID0gMDsNCglpZiAoJHBh Z2Vmb3JtKSB7DQoJCSRwYWdpbmcgPSAxOw0KCQkkcGFnZWZvcm0gPSBmZXRjaF9mb3JtKCRw YWdlZm9ybSk7DQoJfQ0KDQoJLy8gVGhlIGdhbGxlcnkgaWRlbnRpZmllciBpcyB1c2VkIGZv ciBrZWVwaW5nIHRyYWNrIG9mIG5leHQvcHJldiB0aHVtYm5haWwgcGFnZSBsaW5rcw0KCSRn YWxsSUQgPSAnJzsNCglpZiAoJGdhbGxlcnlpZCA9PSAnJyB8fCBzdWJzdHIoJGdhbGxlcnlp ZCwwLDEpID09ICI/Iikgew0KCQkvLyBHZW5lcmF0ZSBhIChmYWlybHkgbGlrZWx5KSB1bmlx dWUgSUQgZm9yIHRoaXMgZ2FsbGVyeSBpbnN0YW5jZQ0KCQkkZ2FsbFRtcCA9IG1kNSgkY2F0 ZWdvcnkuJGlkLiRkaXJlY3RvcnkuJG1hdGNoLiRzdWJsZXZlbC4kc29ydC4kbGltaXQuJG1h eGxpbWl0KTsNCgkJbGlzdCgkZ2FsbExlbiwgJGdhbGxTa2lwKSA9IGV4cGxvZGUoIjoiLCBz dWJzdHIoJGdhbGxlcnlpZCwxKSk7DQoJCSRnYWxsTGVuID0gIChlbXB0eSgkZ2FsbExlbikp ID8gIjQiIDogJGdhbGxMZW47DQoJCSRnYWxsU2tpcCA9ICAoZW1wdHkoJGdhbGxTa2lwKSkg PyAiMSIgOiAkZ2FsbFNraXA7DQoJCWZvciAoJGlkeCA9IDAsICRjbnQgPSAwOyAkY250IDwg JGdhbGxMZW47ICRjbnQrKywgJGlkeCA9ICgoJGlkeCskZ2FsbFNraXApICUgc3RybGVuKCRn YWxsVG1wKSkpIHsNCgkJCSRnYWxsSUQgLj0gJGdhbGxUbXBbJGlkeF07DQoJCX0NCgl9IGVs c2Ugew0KCQkkZ2FsbElEID0gJGdhbGxlcnlpZDsNCgl9DQoJJGdhbGxJRCA9ICJzbWRfZ2xy eV8iLiRnYWxsSUQ7IC8vIEF2b2lkIChhbHJlYWR5IGluY3JlZGlibHkgdW5saWtlbHkpIG5h bWVzcGFjZSBjbGFzaGVzDQoNCgkvLyBUaGUgbWFubmVyIG9mIG9idGFpbmluZyBmaWxlcyBk aWZmZXJzIGlmIHVzaW5nIGRpcmVjdG9yeSB2cyBjYXRlZ29yeS9pZA0KCWlmICgkZGlyZWN0 b3J5KSB7DQoJCSRycyA9IGFycmF5KCk7DQoJCSRyc2FsbCA9IHNtZF9kb0RpcmVjdG9yeSgk ZGlyZWN0b3J5LCAwLCAkc3VibGV2ZWwsICRtYXRjaCwgJGRlbGltKTsNCgkJbGlzdCgkbnVt UGFnZXMsICR0aHVtUGFnZSwgJG9mZnNldCkgPSBzbWRfZ2V0UGFnZSgkcnNhbGwsICRnYWxs SUQsICRsaW1pdCwgJG9mZnNldCwgJHBhZ2luZyk7DQoJCSRkaXJsaW1pdCA9ICgkbGltaXQ9 PTApID8gJG1heGxpbWl0IDogJGxpbWl0Ow0KCQkkcnMgPSBhcnJheV9zbGljZSgkcnNhbGws ICRvZmZzZXQsICRkaXJsaW1pdCk7DQoJCSRwb3N0T3JkZXIgPSBhcnJheSgpOw0KCQkkZml4 ZWRPcmRlciA9IDA7DQoJfSBlbHNlIHsNCgkJLy8gUHJvY2VzcyBjYXRlZ29yaWVzL0lEcyBh bmQgbWFrZSB1cCB0aGUgY3J1eCBvZiB0aGUgd2hlcmUgY2xhdXNlLg0KCQkvLyBDbGF1c2Ug b3JkZXIgPSBJRHMgT1IgY2F0cyBBTkQgIWNhdHMgQU5EICFJRHMNCgkJJGNsYXVzZVtdID0g JzE9MSc7DQoJCSRjbGF1c2VPUiA9IGFycmF5KCk7DQoNCgkJLy8gU3Vycm91bmQgZWFjaCBl bnRyeSBpbiB0aGUgSUQgbGlzdCB3aXRoIHF1b3RlcyBhbmQgbWFrZSBhbiBTUUwgImluIiBs aXN0DQoJCSRzdWJpbmZvID0gKCRzdWJsZXZlbCkgPyAiaW1hZ2U6Ii4kc3VibGV2ZWwgOiAn JzsNCgkJbGlzdCgkaWRpbmMsICRpZGV4YykgPSBzbWRfZG9MaXN0KCRpZCwgdHJ1ZSwgJycs IHRydWUsICRkZWxpbSk7DQoJCWxpc3QoJGNhdGluYywgJGNhdGV4YykgPSBzbWRfZG9MaXN0 KCRjYXRlZ29yeSwgZmFsc2UsICRzdWJpbmZvLCB0cnVlLCAkZGVsaW0pOw0KCQlpZiAoJGlk aW5jKSB7DQoJCQkkY2xhdXNlT1JbXSA9ICdpZCBJTiAoJy5pbXBsb2RlKCIsIiwgJGlkaW5j KS4nKSc7DQoJCX0NCgkJaWYgKCRjYXRpbmMpIHsNCgkJCSRjbGF1c2VPUltdID0gJ2NhdGVn b3J5IElOICgnLmltcGxvZGUoIiwiLCAkY2F0aW5jKS4nKSc7DQoJCX0NCgkJaWYgKCFlbXB0 eSgkY2xhdXNlT1IpKSB7DQoJCQkkY2xhdXNlW10gPSBpbXBsb2RlKCIgT1IgIiwgJGNsYXVz ZU9SKTsNCgkJfQ0KCQkkY2xhdXNlID0gaW1wbG9kZSgiIEFORCAiLCAkY2xhdXNlKTsNCgkJ JGNsYXVzZSAuPSAoJGNhdGV4YykgPyAnIEFORCBjYXRlZ29yeSBOT1QgSU4gKCcuaW1wbG9k ZSgiLCIsICRjYXRleGMpLicpJyA6ICcnOw0KCQkkY2xhdXNlIC49ICgkaWRleGMpID8gJyBB TkQgaWQgTk9UIElOICgnLmltcGxvZGUoIiwiLCAkaWRleGMpLicpJyA6ICcnOw0KDQoJCWlm ICgkZGVidWcgPiAxKSB7DQoJCQllY2hvICIrKyBJTkNMVURFRC9FWENMVURFRCBJRHMgQU5E IENBVHMgKysiOw0KCQkJZG1wKCRpZGluYyk7DQoJCQlkbXAoJGlkZXhjKTsNCgkJCWRtcCgk Y2F0aW5jKTsNCgkJCWRtcCgkY2F0ZXhjKTsNCgkJfQ0KDQoJCS8vIENvbnZlcnQgdGhlIHNv cnQgaW50byBhIHZhbGlkIHNvcnRpbmcgaGllcmFyY2h5Lg0KCQkvLyBOb3RlIHRoYXQgcmFu ZG9tIGlzIGEgc3BlY2lhbCBjYXNlIGFuZCB0aGUgZm9sbG93aW5nIHJ1bGVzIGFwcGx5Og0K CQkvLyAgMSkgQW55dGhpbmcgYXBwZWFyaW5nIGJlZm9yZSByYW5kb20gaXMgcGFzc2VkIHRv IHRoZSBkYXRhYmFzZSBxdWVyeSBmb3Igb3JkZXJpbmcNCgkJLy8gIDIpIEFzIHNvb24gYXMg cmFuZG9tIGlzIGVuY291bnRlcmVkLCB0aGUgcmVzdCBvZiB0aGUgc29ydCBzdHJpbmcgaXMg aWdub3JlZC4NCgkJLy8gICAgIFRoZSByZXN1bHRzZXQgd2lsbCBiZSBzb3J0ZWQgcmFuZG9t bHkgaW5zdGVhZA0KCQkvLyAgMykgSWYgcmFuZG9tIGFwcGVhcnMgZmlyc3QgaW4gdGhlIGxp c3QsIHRoZSBkYXRhIGlzIHJldHJpZXZlZCByYW5kb21seSB0aGVuIHRoZQ0KCQkvLyAgICAg cmVtYWluaW5nIG9wdGlvbnMgc29ydCB0aGUgcmVzdWx0c2V0DQoJCSRjbGF1c2VTb3J0ID0g YXJyYXkoKTsNCgkJJHBvc3RPcmRlciA9IGFycmF5KCk7DQoJCSRydWxlID0gInNxbCI7DQoJ CSRwb3N0UHJlZml4ID0gIlNPUlRfIjsNCgkJJGZpeGVkT3JkZXIgPSAkcmFuZHNvcnQgPSBm YWxzZTsNCgkJJHNvcnQgPSBkb19saXN0KCRzb3J0LCAkZGVsaW0pOw0KCQlmb3IgKCRpZHgg PSAwOyAkaWR4IDwgY291bnQoJHNvcnQpOyAkaWR4KyspIHsNCgkJCSRzb3J0X2RpciA9IGV4 cGxvZGUoJyAnLCAkc29ydFskaWR4XSk7DQoJCQkkZGlyZWN0aW9uID0gJGNvbFJlZiA9ICcn Ow0KCQkJaWYgKGNvdW50KCRzb3J0X2RpcikgPD0gMSkgew0KCQkJCSRzb3J0X2RpclsxXSA9 ICJhc2MiOw0KCQkJfQ0KCQkJaWYgKCRydWxlID09ICJzcWwiKSB7DQoJCQkJJGRpcmVjdGlv biA9ICgkc29ydF9kaXJbMV0gPT0gImRlc2MiKSA/ICcgZGVzYycgOiAnIGFzYyc7DQoJCQl9 IGVsc2Ugew0KCQkJCSRkaXJlY3Rpb24gPSAoJHNvcnRfZGlyWzFdID09ICJkZXNjIikgPyAk cG9zdFByZWZpeC4nREVTQycgOiAkcG9zdFByZWZpeC4nQVNDJzsNCgkJCX0NCg0KCQkJc3dp dGNoICgkc29ydF9kaXJbMF0pIHsNCgkJCQljYXNlICdyYW5kb20nOg0KCQkJCQkkcnVsZSA9 ICJwb3N0IjsNCgkJCQkJaWYgKCRpZHggPT0gMCkgew0KCQkJCQkJJGNsYXVzZVNvcnRbXSA9 ICdyYW5kKCknOw0KCQkJCQl9IGVsc2Ugew0KCQkJCQkJJHJhbmRzb3J0ID0gdHJ1ZTsNCgkJ CQkJfQ0KCQkJCQlicmVhazsNCgkJCQljYXNlICdmaXhlZCc6DQoJCQkJCS8vICdmaXhlZCcg b25seSB3b3JrcyBvbiBpZHMNCgkJCQkJJGZpeGVkT3JkZXIgPSAoJGlkID09ICcnKSA/IGZh bHNlIDogdHJ1ZTsNCgkJCQkJYnJlYWs7DQoJCQkJZGVmYXVsdDoNCgkJCQkJJGNvbFJlZiA9 IGFycmF5X3NlYXJjaCgkc29ydF9kaXJbMF0sICRmaWVsZE1hcCk7DQoJCQkJCWJyZWFrOw0K CQkJfQ0KCQkJaWYgKCRydWxlID09ICJzcWwiKSB7DQoJCQkJaWYgKCRjb2xSZWYgIT0gJycp IHsNCgkJCQkJJGNsYXVzZVNvcnRbXSA9ICRjb2xSZWYuJGRpcmVjdGlvbjsNCgkJCQl9DQoJ CQl9IGVsc2Ugew0KCQkJCWlmICghJHJhbmRzb3J0KSB7DQoJCQkJCWlmICgkY29sUmVmICE9 ICcnKSB7DQoJCQkJCQkkcG9zdE9yZGVyW10gPSBhcnJheSgiY29sIiA9PiAkY29sUmVmLCAi c29ydCIgPT4gJGRpcmVjdGlvbik7DQoJCQkJCX0NCgkJCQl9DQoJCQl9DQoJCX0NCg0KCQlp ZiAoY291bnQoJGNsYXVzZVNvcnQpID4gMCkgew0KCQkJJGNsYXVzZSAuPSAnIE9SREVSIEJZ ICcgLiBpbXBsb2RlKCIsIiwkY2xhdXNlU29ydCk7DQoJCX0NCgkJaWYgKCRkZWJ1ZyA+IDAp IHsNCgkJCWVjaG8gIisrIFdIRVJFIENMQVVTRSArKyI7DQoJCQlkbXAoJGNsYXVzZSk7DQoJ CX0NCgkJLy8gVGhlIGRhdGFiYXNlIGZpZWxkcyByZXF1aXJlZA0KCQkkZmllbGRzID0gaW1w bG9kZSgiLCIsIGFycmF5X2tleXMoJGZpZWxkTWFwKSk7DQoNCgkJLy8gVGltZSB0byBncmFi IHRoZSBtYXRjaGluZyByb3dzIGZyb20gdGhlIGRhdGFiYXNlDQoJCSRyc2FsbCA9IHNhZmVf cm93cygkZmllbGRzLCAndHhwX2ltYWdlJywgJGNsYXVzZSAuJyBMSU1JVCAnLiRvZmZzZXQu JywnLiRtYXhsaW1pdCk7DQoJCWxpc3QoJG51bVBhZ2VzLCAkdGh1bVBhZ2UsICRvZmZzZXQp ID0gc21kX2dldFBhZ2UoJHJzYWxsLCAkZ2FsbElELCAkbGltaXQsICRvZmZzZXQsICRwYWdp bmcpOw0KCQkkcnMgPSBzYWZlX3Jvd3MoJGZpZWxkcywgJ3R4cF9pbWFnZScsICRjbGF1c2Ug LicgTElNSVQgJyAuJG9mZnNldC4gJywnLiAoKCRsaW1pdD09MCkgPyAkbWF4bGltaXQgOiAk bGltaXQpKTsNCgl9DQoNCgkvLyBJcyBwb3N0LW9yZGVyaW5nIHJlcXVpcmVkPyBEbyBpdA0K CWlmICgkcmFuZHNvcnQpIHsNCgkJc2h1ZmZsZSgkcnMpOw0KCX0gZWxzZSBpZiAoY291bnQo JHBvc3RPcmRlcikgPiAwKSB7DQoJCS8vIFRyYW5zbGF0ZSB0aGUgcm93cyBpbnRvIGNvbHVt bnMgdGhhdCBjYW4gYmUgc29ydGVkDQoJCWZvcmVhY2goJHJzIGFzICRrZXkgPT4gJHJvdykg ew0KCQkJJGNvbF9pZFska2V5XSA9ICRyb3dbJ2lkJ107DQoJCQkkY29sX25hbWVbJGtleV0g PSAkcm93WyduYW1lJ107DQoJCQkkY29sX2NhcHRpb25bJGtleV0gPSAkcm93WydjYXB0aW9u J107DQoJCQkkY29sX2FsdFska2V5XSA9ICRyb3dbJ2FsdCddOw0KCQkJJGNvbF9jYXRlZ29y eVska2V5XSA9ICRyb3dbJ2NhdGVnb3J5J107DQoJCQkkY29sX2RhdGVbJGtleV0gPSAkcm93 WydkYXRlJ107DQoJCQkkY29sX2V4dFska2V5XSA9ICRyb3dbJ2V4dCddOw0KCQkJJGNvbF9h dXRob3JbJGtleV0gPSAkcm93WydhdXRob3InXTsNCgkJCSRjb2xfd1ska2V5XSA9ICRyb3db J3cnXTsNCgkJCSRjb2xfaFska2V5XSA9ICRyb3dbJ2gnXTsNCgkJfQ0KCQkvLyBNYWtlIHVw IGFuIGFycmF5X211bHRpc29ydCBhcmcgbGlzdCBhbmQgZXhlY3V0ZSBpdA0KCQlmb3IgKCRp ZHggPSAwOyAkaWR4IDwgY291bnQoJHBvc3RPcmRlcik7ICRpZHgrKykgew0KCQkJJHNvcnRh cmdzW10gPSAnJGNvbF8nLiRwb3N0T3JkZXJbJGlkeF1bJ2NvbCddOw0KCQkJJHNvcnRhcmdz W10gPSAkcG9zdE9yZGVyWyRpZHhdWydzb3J0J107DQoJCX0NCgkJJHNvcnRpdCA9ICdhcnJh eV9tdWx0aXNvcnQoJy5pbXBsb2RlKCIsICIsJHNvcnRhcmdzKS4nLCAkcnMpOyc7DQoJCWV2 YWwoJHNvcnRpdCk7DQoJfQ0KDQoJLy8gSXMgZml4ZWQtb3JkZXIgb3V0cHV0IGRlc2lyZWQ/ IElmIHNvLCByZS1vcmRlciB0aGUgJHJzDQoJaWYgKCRmaXhlZE9yZGVyKSB7DQoJCSRvcmRl cmVkUlMgPSBBcnJheSgpOw0KCQkkaWdub3JlTGlzdCA9IEFycmF5KCk7DQoJCSRyZW1haW5p bmdSUyA9IEFycmF5KCk7DQoJCS8vIFN1Y2sgb3V0IHRoZSBmaXhlZCBpdGVtcyBmaXJzdA0K CQlmb3IgKCRpZHggPSAwOyAkaWR4IDwgY291bnQoJGlkaW5jKTsgJGlkeCsrKSB7DQoJCQlm b3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQkJaWYgKCInIi4kcm93WydpZCddLiInIiA9PSAk aWRpbmNbJGlkeF0pIHsNCgkJCQkJJG9yZGVyZWRSU1tdID0gJHJvdzsNCgkJCQkJJGlnbm9y ZUxpc3RbXSA9ICRyb3dbJ2lkJ107DQoJCQkJfQ0KCQkJfQ0KCQl9DQoJCS8vIFRhY2sgb24g dGhlIHJlbWFpbmluZyByb3dzDQoJCWZvcmVhY2goJHJzIGFzICRyb3cpIHsNCgkJCWlmICgh aW5fYXJyYXkoJHJvd1snaWQnXSwgJGlnbm9yZUxpc3QpKSB7DQoJCQkJJHJlbWFpbmluZ1JT W10gPSAkcm93Ow0KCQkJfQ0KCQl9DQoJCSRycyA9IGFycmF5X21lcmdlKCRvcmRlcmVkUlMs ICRyZW1haW5pbmdSUyk7DQoJfQ0KDQoJLy8gSGFuZGxlIHRodW1ic2l6ZSAtIG9mIGxpbWl0 ZWQgdXNlIG5vdyBidXQgc3RpbGwgYXZhaWxhYmxlDQoJJHRodW1iV2lkdGggPSAkdGh1bWJI ZWlnaHQgPSAnJzsNCgkkdGh1bWJXVW5pdHMgPSAkdGh1bWJIVW5pdHMgPSAnJzsNCglpZiAo JHRodW1ic2l6ZSkgew0KCQkkdGh1bWJTaXplcyA9IHNtZF9zcGxpdCgkdGh1bWJzaXplLCBm YWxzZSwgIixccyIsIDApOw0KCQlpZiAoY291bnQoJHRodW1iU2l6ZXMpID09IDEpIHsNCgkJ CSR0aHVtYldpZHRoID0gJHRodW1iSGVpZ2h0ID0gZXJlZ19yZXBsYWNlKCJbXjAtOV0iLCAn JywgJHRodW1iU2l6ZXNbMF0pOw0KCQkJJHVuaXRzID0gZXJlZ19yZXBsYWNlKCJbMC05XSIs ICcnLCAkdGh1bWJTaXplc1swXSk7DQoJCQkkdGh1bWJXVW5pdHMgPSAkdGh1bWJIVW5pdHMg PSAoJHVuaXRzID09ICcnKSA/ICR0aHVtYldVbml0cyA6ICR1bml0czsNCgkJfSBlbHNlIHsN CgkJCSR0aHVtYldpZHRoID0gZXJlZ19yZXBsYWNlKCJbXjAtOV0iLCAnJywgJHRodW1iU2l6 ZXNbMF0pOw0KCQkJJHRodW1iSGVpZ2h0ID0gZXJlZ19yZXBsYWNlKCJbXjAtOV0iLCAnJywg JHRodW1iU2l6ZXNbMV0pOw0KCQkJJHVuaXRzID0gZXJlZ19yZXBsYWNlKCJbMC05XSIsICcn LCAkdGh1bWJTaXplc1swXSk7DQoJCQkkdGh1bWJXVW5pdHMgPSAoJHVuaXRzID09ICcnICYm ICR0aHVtYldpZHRoICE9ICcnKSA/ICR0aHVtYldVbml0cyA6ICR1bml0czsNCgkJCSR1bml0 cyA9IGVyZWdfcmVwbGFjZSgiWzAtOV0iLCAnJywgJHRodW1iU2l6ZXNbMV0pOw0KCQkJJHRo dW1iSFVuaXRzID0gKCR1bml0cyA9PSAnJyAmJiAkdGh1bWJIZWlnaHQgIT0gJycpID8gJHRo dW1iSFVuaXRzIDogJHVuaXRzOw0KCQl9DQoJfQ0KDQoJLy8gQ29sbGF0aW9uIGRlZmVycyBw YXJzaW5nIHRoZSBmb3JtIGZvciBlYWNoIHJldHVybmVkIGl0ZW0uDQoJLy8gSW5zdGVhZCBp dCBvdXRwdXRzIHRoZSBkYXRhIGFzIGEgbGlzdCBhdCB0aGUgZW5kIChpdGVtcyBtYXkgYmUg aW5kaXZpZHVhbGx5IHF1b3RlZCBvciBleHRyYWN0ZWQgaWYgcmVxdWlyZWQpDQoJLy9UT0RP IDogQWRkIEFMV0FZUyBzd2l0Y2ggYXMgYSBzaG9ydGN1dCB0byBzcGVjaWZ5IHRoYXQgYWxs IG1hdGNoaW5nIGl0ZW1zIChyZWdhcmRsZXNzIG9mICMxLCAjMiwgIzMgZXRjKSBhcmUgdG8g YmUgcXVvdGVkDQoJaWYgKCRjb2xsYXRlKSB7DQoJCSRkYmxRdW90ZSA9ICRzZ2xRdW90ZSA9 IGFycmF5KCdTTUROT05FJyk7DQoJCSRjb2xsYXRlT3B0cyA9IGRvX2xpc3QoJGNvbGxhdGUs ICRkZWxpbSk7DQoJCWZvcmVhY2ggKCRjb2xsYXRlT3B0cyBhcyAkb3B0aW9uKSB7DQoJCQkk aW5kZXhlcyA9IGRvX2xpc3QoJG9wdGlvbiwgJHBhcmFtZGVsaW0pOw0KCQkJJGNvbFR5cGUg PSBhcnJheV9zaGlmdCgkaW5kZXhlcyk7DQoJCQkvLyBTdXBwbHlpbmcgJ3F1b3RlJyBvbiBp dHMgb3duIHdpbGwgZW1wdHkgdGhlIHJlbGV2YW50IGFycmF5LCBpbXBseWluZyAiQUxMIiBm aWVsZHMgYXJlIHRvIGJlIHF1b3RlZA0KCQkJc3dpdGNoICgkY29sVHlwZSkgew0KCQkJCWNh c2UgInNnbHF1b3RlIjoNCgkJCQkJJHNnbFF1b3RlID0gJGluZGV4ZXM7DQoJCQkJCWJyZWFr Ow0KCQkJCWNhc2UgImRibHF1b3RlIjoNCgkJCQljYXNlICJxdW90ZSI6DQoJCQkJCSRkYmxR dW90ZSA9ICRpbmRleGVzOw0KCQkJCQlicmVhazsNCgkJCX0NCgkJfQ0KCX0NCg0KCS8vIENv bWJvcyBhcmUgdXNlci1kZWZpbmVkIGNvbWJpbmF0aW9ucyBvZiByZXBsYWNlbWVudCBtb2Rp ZmllcnMgKGUuZy4gaWRleHQ6IHtpZH17ZXh0fSwgLi4uDQoJJGNvbWJvcyA9IGFycmF5KCk7 DQoJaWYgKCRjb21ibykgew0KCQkkY29tYm8gPSBkb19saXN0KCRjb21ibywgJGRlbGltKTsN CgkJZm9yZWFjaCAoJGNvbWJvIGFzICRuZXdEZWYpIHsNCgkJCWxpc3QoJGRlZlBhcnRzLCAk dW53YW50ZWQpID0gc21kX2RvTGlzdCgkbmV3RGVmLCBmYWxzZSwgJycsIGZhbHNlLCAkcGFy YW1kZWxpbSk7DQoJCQkkZGVmTmFtZSA9ICJ7Ii5hcnJheV9zaGlmdCgkZGVmUGFydHMpLiJ9 IjsNCgkJCSRjb21ib3NbJGRlZk5hbWVdID0gJGRlZlBhcnRzWzBdOw0KCQl9DQoJfQ0KCWlm ICgkZGVidWcgPiAxKSB7DQoJCWVjaG8gIisrIENPTUJPcyArKyI7DQoJCWRtcCgkY29tYm9z KTsNCgl9DQoJLy8gQ29uc3RydWN0IHRoZSBvdXRwdXQNCgkkb3V0ID0gYXJyYXkoKTsNCgkk Y29sbGF0aW9ucyA9IGFycmF5KCk7DQoJaWYgKCRkZWJ1ZyA+IDIpIHsNCgkJZWNobyAiKysg UkVDT1JEIFNFVCArKyI7DQoJCWRtcCgkcnMpOw0KCX0NCglpZiAoJGRlYnVnID4gMykgew0K CQllY2hvICIrKyBBVkFJTEFCTEUgJz8nIFZBUlMgKysiOw0KCQlkbXAoJHByZXRleHQpOw0K CQlkbXAoJHRoaXNhcnRpY2xlKTsNCgl9DQoNCglpZigkcnMpIHsNCgkJJGlkeCA9IDA7DQoJ CSRjdHIgPSAxOw0KCQlmb3JlYWNoKCRycyBhcyAkcm93KSB7DQoJCQlpZiAoJGRpcmVjdG9y eSkgew0KCQkJCSR1cmxQYXRoID0gJHJvd1sncGF0aCddLkRTOw0KCQkJfSBlbHNlIHsNCgkJ CQkkdXJsUGF0aCA9IGh1LiRpbWdfZGlyLkRTOw0KCQkJfQ0KCQkJJHRoZVRodW1iID0gJHVy bFBhdGggLiAkcm93WydpZCddIC4gJ3QnIC4gJHJvd1snZXh0J107DQoJCQkkZnVsbFNpemUg PSAkdXJsUGF0aCAuICRyb3dbJ2lkJ10gLiAoKCR0aHVtYikgPyAidCIgOiAnJykgLiRyb3db J2V4dCddOw0KDQoJCQkvLyBJcyBhIHRodW1iL3RleHQgb2JqZWN0IHJlcXVpcmVkIHRoaXMg dGltZT8NCgkJCSRvYmplY3QgPSAnJzsNCgkJCWlmICgkaWR4ID49ICR0aHVtYm9mZnNldCAm JiAkaWR4IDwgJHRodW1ib2Zmc2V0KyR0aHVtYmxpbWl0KSB7DQoJCQkJc3dpdGNoICgkdHlw ZSkgew0KCQkJCQljYXNlIGltYWdlOg0KCQkJCQkJJG9iamVjdCA9ICgkdGV4dCkgPyAkdGV4 dCA6ICc8aW1nIHNyYz0iJy4kdGhlVGh1bWIuJyInIC4oKCRyb3dbJ2FsdCddKSA/ICcgYWx0 PSInLiRyb3dbJ2FsdCddLiciJyA6ICcnKSAuKCgkdGh1bWJXaWR0aCkgPyAnIHdpZHRoPSIn LiR0aHVtYldpZHRoLiR0aHVtYldVbml0cy4nIicgOiAnJykgLigoJHRodW1iSGVpZ2h0KSA/ ICcgaGVpZ2h0PSInLiR0aHVtYkhlaWdodC4kdGh1bWJIVW5pdHMuJyInIDogJycpIC4nIC8+ JzsNCgkJCQkJCWJyZWFrOw0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gQ29uc3RydWN0IHRoZSBy ZXBsYWNlbWVudCBhcnJheQ0KCQkJJHJlcGxhY2VtZW50cyA9IGFycmF5KA0KCQkJCQkne2lk fScgPT4gJHJvd1snaWQnXSwNCgkJCQkJJ3tuYW1lfScgPT4gJHJvd1snbmFtZSddLA0KCQkJ CQkne2V4dH0nID0+ICRyb3dbJ2V4dCddLA0KCQkJCQkne2NhdGVnb3J5fScgPT4gJHJvd1sn Y2F0ZWdvcnknXSwNCgkJCQkJJ3thdXRob3J9JyA9PiAkcm93WydhdXRob3InXSwNCgkJCQkJ J3toYXN0aHVtYn0nID0+ICRyb3dbJ3RodW1ibmFpbCddLA0KCQkJCQkne3VybH0nID0+ICRm dWxsU2l6ZSwNCgkJCQkJJ3t0aHVtYnVybH0nID0+ICR0aGVUaHVtYiwNCgkJCQkJJ3tpbWFn ZXBhdGh9JyA9PiAkdXJsUGF0aCwNCgkJCQkJJ3tpbWFnZWRlZn0nID0+IGJhc2VuYW1lKCRm dWxsU2l6ZSksDQoJCQkJCSd7dGh1bWJkZWZ9JyA9PiBiYXNlbmFtZSgkdGhlVGh1bWIpLA0K CQkJCQkne2FsdH0nID0+ICRyb3dbJ2FsdCddLA0KCQkJCQkne3RpdGxlfScgPT4gJHJvd1sn Y2FwdGlvbiddLA0KCQkJCQkne3RodW1id2lkdGh9JyA9PiAkdGh1bWJXaWR0aCwNCgkJCQkJ J3t0aHVtYmhlaWdodH0nID0+ICR0aHVtYkhlaWdodCwNCgkJCQkJJ3t0aHVtYnd1bml0c30n ID0+ICR0aHVtYldVbml0cywNCgkJCQkJJ3t0aHVtYmh1bml0c30nID0+ICR0aHVtYkhVbml0 cywNCgkJCQkJJ3t3aWR0aH0nID0+ICRyb3dbJ3cnXSwNCgkJCQkJJ3toZWlnaHR9JyA9PiAk cm93WydoJ10sDQoJCQkJCSd7ZGF0ZX0nID0+ICRyb3dbJ2RhdGUnXSwNCgkJCQkJJ3tvYmpl Y3R9JyA9PiAkb2JqZWN0LA0KCQkJCSk7DQoNCgkJCS8vIEFwcGVuZCBhbnkgY29tYm9zDQoJ CQlmb3JlYWNoICgkY29tYm9zIGFzICRkZWZOYW1lID0+ICRuZXdEZWYpIHsNCgkJCQlpZiAo IWFycmF5X2tleV9leGlzdHMoJGRlZk5hbWUsICRyZXBsYWNlbWVudHMpKSB7DQoJCQkJCSRy ZXBsYWNlbWVudHNbJGRlZk5hbWVdID0gc3RydHIoJG5ld0RlZiwgJHJlcGxhY2VtZW50cyk7 DQoJCQkJfQ0KCQkJfQ0KDQoJCQkvLyBTb2xvcyBhcmUgaXRlbXMgaW4gdGhlIG91dHB1dCBm b3JtIHRoYXQgcmVxdWlyZSBkZXRhaWxzIGZyb20gYSBzcGVjaWZpYyByb3cuIFVzZWZ1bCBv bmx5IGluIGNvbGxhdGlvbg0KCQkJLy8gbW9kZSwgdGhleSBhcmUgYWRkZWQgdG8gdGhlIHJl cGxhY2VtZW50cyBhcnJheSBvbiBhbiBhcy1uZWVkZWQgYmFzaXMgdG8gc2F2ZSBzcGFjZS90 aW1lDQoJCQkkc29sb1JFID0gJy9ceyhbYS16MC05XSspIycuJGN0ci4nXH0vJzsNCgkJCSRu dW1Tb2xvcyA9IHByZWdfbWF0Y2hfYWxsKCRzb2xvUkUsICR0aGluZywgJHNvbG9zKTsNCgkJ CWZvciAoJHNvbG9DdHIgPSAwOyAkc29sb0N0ciA8ICRudW1Tb2xvczsgJHNvbG9DdHIrKykg ew0KCQkJCSRmaWVsZG5hbWUgPSAneycuJHNvbG9zWzFdWyRzb2xvQ3RyXS4nIycuJGN0ci4n fSc7DQoJCQkJJGdyYWJmaWVsZCA9ICd7Jy4kc29sb3NbMV1bJHNvbG9DdHJdLid9JzsNCgkJ CQkkcmVwbGFjZW1lbnRzWyRmaWVsZG5hbWVdID0gJHJlcGxhY2VtZW50c1skZ3JhYmZpZWxk XTsNCgkJCX0NCg0KCQkJaWYgKCRkZWJ1ZyA+IDApIHsNCgkJCQllY2hvICIrKyBSRVBMQUNF TUVOVFMgOiBJTUFHRSAiLiRjdHIuIiArKyI7DQoJCQkJZG1wKCRyZXBsYWNlbWVudHMpOw0K CQkJfQ0KDQoJCQkvLyBJbiBjb2xsYXRlIG1vZGUgdGhlIGZvcm0gaXMgb25seSBwYXJzZWQg YXQgdGhlIGVuZDogYnVpbGQgYSBjb2xsb3NhbCBtdWx0aS1kaW1lbnNpb24gYXJyYXkgb2Yg YWxsIGl0ZW1zIGhlcmUNCgkJCWlmICgkY29sbGF0ZSkgew0KCQkJCWZvcmVhY2ggKCRyZXBs YWNlbWVudHMgYXMgJGRlZk5hbWUgPT4gJGRlZlZhbCkgew0KCQkJCQkkY29sbGF0aW9uc1sk ZGVmTmFtZV1bXSA9ICRkZWZWYWw7DQoJCQkJfQ0KCQkJfSBlbHNlIHsNCgkJCQkkb3V0W10g PSBwYXJzZShzdHJ0cigkdGhpbmcsICRyZXBsYWNlbWVudHMpKTsNCgkJCX0NCg0KCQkJJGlk eCsrOw0KCQkJJGN0cisrOw0KCQl9DQoJCWlmICgkY29sbGF0ZSkgew0KCQkJZm9yZWFjaCAo JGNvbGxhdGlvbnMgYXMgJGl0ZW0gPT4gJGxpc3QpIHsNCgkJCQkvLyBRdW90ZSB0aGUgbGlz dHMgaWYgcmVxdWlyZWQNCgkJCQkkbGlzdCA9IChlbXB0eSgkZGJsUXVvdGUpIHx8IGluX2Fy cmF5KCRpdGVtLCAkZGJsUXVvdGUpKSA/IGRvQXJyYXkoJGxpc3QsICdzbWRfZG9EYmxRdW90 ZScpIDogJGxpc3Q7DQoJCQkJJGxpc3QgPSAoZW1wdHkoJHNnbFF1b3RlKSB8fCBpbl9hcnJh eSgkaXRlbSwgJHNnbFF1b3RlKSkgPyBkb0FycmF5KCRsaXN0LCAnZG9RdW90ZScpIDogJGxp c3Q7DQoJCQkJJGNvbGxhdGlvbnNbJGl0ZW1dID0gaW1wbG9kZSgkZGVsaW0sICRsaXN0KTsN CgkJCX0NCgkJCWlmICgkZGVidWcgPiAwKSB7DQoJCQkJZWNobyAiKysgQ09MTEFUSU9OUyAr KyI7DQoJCQkJZG1wKCRjb2xsYXRpb25zKTsNCgkJCX0NCgkJCSRvdXRbXSA9IHBhcnNlKHN0 cnRyKCR0aGluZywgJGNvbGxhdGlvbnMpKTsNCgkJfQ0KDQoJCS8vIEFkZCB0aGUgcGFnaW5n IGZlYXR1cmVzIGlmIHJlcXVpcmVkDQoJCWlmICgoJGxpbWl0ID4gMCkgJiYgJHBhZ2luZykg ew0KCQkJJG5hdm91dCA9IGFycmF5KCk7DQoJCQkkbmV4dCA9ICgkbnVtUGFnZXMgPiAxICYm ICR0aHVtUGFnZSAhPSAkbnVtUGFnZXMpOw0KCQkJJHByZXYgPSAoJG51bVBhZ2VzID4gMSAm JiAkdGh1bVBhZ2UgPiAxKTsNCg0KCQkJLy8gUmVwbGFjZSBhbnkgcGFnaW5nIGluZm8gaW4g dGhlIHF1ZXJ5IHN0cmluZw0KCQkJJHByZXZQYWdlID0gc21kX2FkZFFTVmFyKCRwcmV0ZXh0 WydyZXF1ZXN0X3VyaSddLCAkZ2FsbElELCAkdGh1bVBhZ2UtMSk7DQoJCQkkbmV4dFBhZ2Ug PSBzbWRfYWRkUVNWYXIoJHByZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxsSUQsICR0aHVt UGFnZSsxKTsNCgkJCSR0aGlzUGFnZSA9IHNtZF9hZGRRU1ZhcigkcHJldGV4dFsncmVxdWVz dF91cmknXSwgJGdhbGxJRCwgJHRodW1QYWdlKTsNCgkJCSRmaXJzdFBhZ2UgPSBzbWRfYWRk UVNWYXIoJHByZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxsSUQsIDEpOw0KCQkJJGxhc3RQ YWdlID0gc21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLCAkZ2FsbElELCAk bnVtUGFnZXMpOw0KDQoJCQkvLyBMYWJlbHMgY2FuIGJlIHNwZWNpZmllZCBpbiB0aGUgcmVw bGFjZW1lbnQgdGFnIGFmdGVyIGEgcGFyYW1kZWxpbS4NCgkJCS8vICdlYXJsaWVyJyBhbmQg J2xhdGVyJyBkb24ndCBoYXZlIGxhYmVscy4gQW55dGhpbmcgc3BlY2lmaWVkIGFmdGVyIHBh cmFtZGVsaW0gaXMgdGhlIG1heCBudW1iZXIgb2YgcGFnZXMgdG8gc2hvdzsgZW1wdHkgPSBh bGwgcGFnZXMNCgkJCSRsYWJlbCA9IGFycmF5KA0KCQkJCQkne25hdmZpcnN0fScgPT4gJ0Zp cnN0JywNCgkJCQkJJ3tuYXZwcmV2fScgPT4gJyZsYXF1bzsnLA0KCQkJCQkne25hdmVhcmxp ZXJ9JyA9PiAnJywNCgkJCQkJJ3tuYXZ0aGlzfScgPT4gJHRodW1QYWdlLA0KCQkJCQkne25h dnRoaXN1cmx9JyA9PiAkdGh1bVBhZ2UsDQoJCQkJCSd7bmF2bGF0ZXJ9JyA9PiAnJywNCgkJ CQkJJ3tuYXZuZXh0fScgPT4gJyZyYXF1bzsnLA0KCQkJCQkne25hdmxhc3R9JyA9PiAnTGFz dCcsDQoJCQkJKTsNCg0KCQkJJGxhYmVsUkUgPSAnL1x7KG5hdlthLXpdKyknLiRwYXJhbWRl bGltLicoLis/KVx9Lyc7DQoJCQkkbnVtTGFiZWxzID0gcHJlZ19tYXRjaF9hbGwoJGxhYmVs UkUsICRwYWdlZm9ybSwgJGxhYmVscyk7DQoNCgkJCWZvciAoJGxhYmVsQ3RyID0gMDsgJGxh YmVsQ3RyIDwgJG51bUxhYmVsczsgJGxhYmVsQ3RyKyspIHsNCgkJCQkkZmllbGRuYW1lID0g J3snLiRsYWJlbHNbMV1bJGxhYmVsQ3RyXS4nfSc7DQoJCQkJJGxhYmVsWyRmaWVsZG5hbWVd ID0gJGxhYmVsc1syXVskbGFiZWxDdHJdOw0KCQkJCSRwYWdlZm9ybSA9IHN0cl9yZXBsYWNl KCRsYWJlbHNbMF1bJGxhYmVsQ3RyXSwgJ3snLiRsYWJlbHNbMV1bJGxhYmVsQ3RyXS4nfScs ICRwYWdlZm9ybSk7DQoJCQl9DQoNCgkJCWlmICgkZGVidWcgPiAxKSB7DQoJCQkJZWNobyAi KysgUEFHSU5HIExBQkVMUyArKyI7DQoJCQkJZG1wKCRsYWJlbCk7DQoJCQl9DQoNCgkJCS8v IEdlbmVyYXRlICdlYXJsaWVyJyBhbmQgJ2xhdGVyJyBsaXN0cw0KCQkJJG51bUVhcmxpZXIg PSBpbnR2YWwoJGxhYmVsWyd7bmF2ZWFybGllcn0nXSk7DQoJCQkkbnVtTGF0ZXIgPSBpbnR2 YWwoJGxhYmVsWyd7bmF2bGF0ZXJ9J10pOw0KCQkJJG51bUVhcmxpZXIgPSAoJG51bUVhcmxp ZXIgJiYgKCR0aHVtUGFnZS0kbnVtRWFybGllciA+IDEpKSA/ICRudW1FYXJsaWVyIDogJHRo dW1QYWdlLTE7DQoJCQkkbnVtTGF0ZXIgPSAoJG51bUxhdGVyICYmICgkdGh1bVBhZ2UrJG51 bUxhdGVyIDwgJG51bVBhZ2VzKSkgPyAkbnVtTGF0ZXIgOiAkbnVtUGFnZXMtJHRodW1QYWdl Ow0KCQkJJG5hdkVhcmxpZXIgPSAkbmF2TGF0ZXIgPSBhcnJheSgpOw0KCQkJZm9yICgkaWR4 ID0gJHRodW1QYWdlLSRudW1FYXJsaWVyOyAkaWR4IDwgJHRodW1QYWdlOyAkaWR4KyspIHsN CgkJCQkkbmF2RWFybGllcltdID0gJzxhIGhyZWY9Iicuc21kX2FkZFFTVmFyKCRwcmV0ZXh0 WydyZXF1ZXN0X3VyaSddLCAkZ2FsbElELCAkaWR4KS4nIj4nLiRpZHguJzwvYT4nOw0KCQkJ fQ0KCQkJZm9yICgkaWR4ID0gJHRodW1QYWdlKzE7ICRpZHggPD0gJHRodW1QYWdlKyRudW1M YXRlcjsgJGlkeCsrKSB7DQoJCQkJJG5hdkxhdGVyW10gPSAnPGEgaHJlZj0iJy5zbWRfYWRk UVNWYXIoJHByZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxsSUQsICRpZHgpLiciPicuJGlk eC4nPC9hPic7DQoJCQl9DQoJCQkkbmF2RWFybGllciA9IGRvV3JhcCgkbmF2RWFybGllciwg JycsICRuYXZicmVhaywgJycpOw0KCQkJJG5hdkxhdGVyID0gZG9XcmFwKCRuYXZMYXRlciwg JycsICRuYXZicmVhaywgJycpOw0KDQoJCQkvLyBNYWtlIHVwIHRoZSByZXBsYWNlbWVudHMg YXJyYXkgZm9yIHBhZ2Vmb3JtDQoJCQkkcmVwbGFjZW1lbnRzID0gYXJyYXkoDQoJCQkJCSd7 bmF2Zmlyc3R9JyA9PiAoKCRwcmV2KSA/IGRvVGFnKCc8YSBocmVmPSInLiRmaXJzdFBhZ2Uu JyI+Jy4kbGFiZWxbJ3tuYXZmaXJzdH0nXS4nPC9hPicsICRuYXZicmVhaykgOiBkb1RhZygk bGFiZWxbJ3tuYXZmaXJzdH0nXSwgJG5hdmJyZWFrKSksDQoJCQkJCSd7bmF2cHJldn0nID0+ ICgoJHByZXYpID8gZG9UYWcoJzxhIGhyZWY9IicuJHByZXZQYWdlLiciPicuJGxhYmVsWyd7 bmF2cHJldn0nXS4nPC9hPicsICRuYXZicmVhaykgOiBkb1RhZygkbGFiZWxbJ3tuYXZwcmV2 fSddLCAkbmF2YnJlYWspKSwNCgkJCQkJJ3tuYXZlYXJsaWVyfScgPT4gJG5hdkVhcmxpZXIs DQoJCQkJCSd7bmF2dGhpc30nID0+IGRvVGFnKCRsYWJlbFsne25hdnRoaXN9J10sICRuYXZi cmVhaywgJ2N1cnJlbnQnKSwNCgkJCQkJJ3tuYXZ0aGlzdXJsfScgPT4gZG9UYWcoJzxhIGhy ZWY9IicuJHRoaXNQYWdlLiciPicuJGxhYmVsWyd7bmF2dGhpc3VybH0nXS4nPC9hPicsICRu YXZicmVhaywgJ2N1cnJlbnQnKSwNCgkJCQkJJ3tuYXZsYXRlcn0nID0+ICRuYXZMYXRlciwN CgkJCQkJJ3tuYXZuZXh0fScgPT4gKCgkbmV4dCkgPyBkb1RhZygnPGEgaHJlZj0iJy4kbmV4 dFBhZ2UuJyI+Jy4kbGFiZWxbJ3tuYXZuZXh0fSddLic8L2E+JywgJG5hdmJyZWFrKSA6IGRv VGFnKCRsYWJlbFsne25hdm5leHR9J10sICRuYXZicmVhaykpLA0KCQkJCQkne25hdmxhc3R9 JyA9PiAoKCRuZXh0KSA/IGRvVGFnKCc8YSBocmVmPSInLiRsYXN0UGFnZS4nIj4nLiRsYWJl bFsne25hdmxhc3R9J10uJzwvYT4nLCAkbmF2YnJlYWspIDogZG9UYWcoJGxhYmVsWyd7bmF2 bGFzdH0nXSwgJG5hdmJyZWFrKSksDQoJCQkJKTsNCg0KCQkJaWYgKCRkZWJ1ZyA+IDApIHsN CgkJCQllY2hvICIrKyBQQUdJTkcgUkVQTEFDRU1FTlRTICsrIjsNCgkJCQlkbXAoJHJlcGxh Y2VtZW50cyk7DQoJCQl9DQoJCQkvLyBQZXJmb3JtIGFsbCBzdWJzdGl0dXRpb25zIGFuZCB3 cmFwIHRoZSBlbnRpcmUgbG90IGlmIHJlcXVpcmVkDQoJCQkkbmF2b3V0W10gPSBwYXJzZShz dHJ0cigkcGFnZWZvcm0sICRyZXBsYWNlbWVudHMpKTsNCgkJCSRvdXRbXSA9IGRvV3JhcCgk bmF2b3V0LCAkbmF2d3JhcHRhZywgJycsICRuYXZjbGFzcyk7DQoJCX0NCgkJaWYgKCRkZWJ1 ZyA+IDIpIHsNCgkJCWVjaG8gIisrIEZJTkFMIE9VVFBVVCArKyI7DQoJCQlkbXAoJG91dCk7 DQoJCX0NCgl9DQoNCglyZXR1cm4gZG9XcmFwKCRvdXQsICR3cmFwdGFnLCAkYnJlYWssICRj bGFzcyk7DQp9DQoNCi8vIFJldHVybiBhbiBleHBhbmRlZCBsaXN0IG9mIGl0ZW1zOg0KLy8g MSkgQW55dGhpbmcgY29udGFpbmluZyAnPycgb3IgJyEnIGlzIGNoZWNrZWQgZm9yIGEgbWF0 Y2ggd2l0aCBhIFRYUCBmaWVsZA0KLy8gMikgQW55IHJhbmdlcyBvZiBpdGVtcyBhcmUgZXhw YW5kZWQgKGUuZy4gNC03ID0gNCw1LDYsNykNCi8vIDMpIFRYUCBmaWVsZHMgbWF5IHRoZW1z ZWx2ZXMgYmUgbGlzdHMgb3IgcmFuZ2VzDQovLyA0KSBBbnl0aGluZyB0aGF0IGlzIG5vdCBh IFRYUCBmaWVsZCBpcyB1c2VkIHZlcmJhdGltDQovLyA1KSBUaGUgaXRlbXMgYXJlIHJldHVy bmVkIGFzIDIgbGlzdHM7IGluY2x1c2lvbiBhbmQgZXhjbHVzaW9uDQovLyBBcmdzOg0KLy8g IGxzdCA9IHRoZSBsaXN0IGFzIGEgZGVsaW1pdGVkIHN0cmluZw0KLy8gIHJuZyA9IHdoZXRo ZXIgdG8gYWxsb3cgcmFuZ2VzIG9yIG5vdCAoYm9vbCkNCi8vICBzdWIgPSB0aGUgdHlwZSBv ZiBzdWJjYXRlZ29yeSB0byB0cmF2ZXJzZSAoaW1hZ2UsIGZpbGUsIGxpbmssIGFydGljbGUs IG5vbmU9IiIpIGFuZCBob3cgbWFueSBsZXZlbHMgdG8gZ28gZG93biAoZS5nLiBpbWFnZToy KQ0KLy8gIHF0ZSA9IHdoZXRoZXIgdG8gcXVvdGUgZWFjaCBpdGVtIGluIHRoZSBhcnJheSBv ciBub3QgKGJvb2wpDQovLyAgZGxtID0gdGhlIGRlbGltaXRlciAoc3RyaW5nKQ0KaWYgKCFm dW5jdGlvbl9leGlzdHMoInNtZF9kb0xpc3QiKSkgew0KZnVuY3Rpb24gc21kX2RvTGlzdCgk bHN0LCAkcm5nPXRydWUsICRzdWI9IiIsICRxdGU9dHJ1ZSwgJGRsbT0iLCIpIHsNCglnbG9i YWwgJHRoaXNhcnRpY2xlLCAkcHJldGV4dDsNCg0KCSRpbmMgPSAkZXhjID0gYXJyYXkoKTsN CgkkbHN0ID0gZG9fbGlzdCgkbHN0LCAkZGxtKTsNCgkkbW9kUkUgPSAnLyhcP3xcISkoW0Et WmEtejAtOV9cLSBdKykvJzsNCglmb3JlYWNoICgkbHN0IGFzICRpdGVtKSB7DQoJCSRtb2Qg PSAwOyAvLyAwID0gaW5jbHVkZSwgMSA9IGV4Y2x1ZGUNCgkJJG51bU1vZHMgPSBwcmVnX21h dGNoX2FsbCgkbW9kUkUsICRpdGVtLCAkbW9kcyk7DQoNCgkJZm9yICgkbW9kQ3RyID0gMDsg JG1vZEN0ciA8ICRudW1Nb2RzOyAkbW9kQ3RyKyspIHsNCgkJCS8vIG1vZCAidHlwZSIgaXMg Z292ZXJuZWQgYnkgdGhlIGZpcnN0IG9uZSBmb3VuZCBvbmx5LiBpLmUuIGlmICJhcnRpY2xl LT9jIXMiIHdhcyB1c2VkIGluIG9uZSBmaWVsZA0KCQkJLy8gaXQgd291bGQgYmUgYW4gImlu Y2x1ZGUiIG9mIHRoZSB3b3JkICJhcnRpY2xlLSIgcGx1cyB0aGUgY2F0ZWdvcnkgYW5kIHNl Y3Rpb24gY29uY2F0ZW5hdGVkDQoJCQkkbW9kID0gKCRtb2RzWzFdWzBdID09PSAiISIpID8g MSA6IDA7DQoJCQkkbW9kQ2hhciA9ICRtb2RzWzFdWyRtb2RDdHJdOw0KCQkJJG1vZEl0ZW0g PSB0cmltKCRtb2RzWzJdWyRtb2RDdHJdKTsNCgkJCSRsb3dpdGVtID0gc3RydG9sb3dlcigk bW9kSXRlbSk7DQoJCQlpZiAoYXJyYXlfa2V5X2V4aXN0cygkbG93aXRlbSwgJHByZXRleHQp KSB7DQoJCQkJJGl0ZW0gPSBzdHJfcmVwbGFjZSgkbW9kQ2hhci4kbW9kSXRlbSwgJHByZXRl eHRbJGxvd2l0ZW1dLCAkaXRlbSk7DQoJCQl9IGVsc2UgaWYgKGlzc2V0KCR0aGlzYXJ0aWNs ZVskbG93aXRlbV0pKSB7DQoJCQkJJGl0ZW0gPSBzdHJfcmVwbGFjZSgkbW9kQ2hhci4kbW9k SXRlbSwgJHRoaXNhcnRpY2xlWyRsb3dpdGVtXSwgJGl0ZW0pOw0KCQkJfSBlbHNlIHsNCgkJ CQkkaXRlbSA9IHN0cl9yZXBsYWNlKCRtb2RDaGFyLiRtb2RJdGVtLCAkbW9kSXRlbSwgJGl0 ZW0pOw0KCQkJfQ0KCQl9DQoNCgkJLy8gSGFuZGxlIHJhbmdlcyBvZiB2YWx1ZXMNCgkJaWYg KCRybmcgJiYgcHJlZ19tYXRjaCgnL14oXGQrKVwtKFxkKykkLycsICRpdGVtKSkgew0KCQkJ bGlzdCgkbG8sICRoaSkgPSBleHBsb2RlKCItIiwgJGl0ZW0sIDIpOw0KCQkJJGl0ZW0gPSBp bXBsb2RlKCRkbG0sIHJhbmdlKCRsbywgJGhpKSk7DQoJCX0NCg0KCQkvLyBJdGVtIG1heSBi ZSBlbXB0eTsgaWdub3JlIGl0IGlmIHNvDQoJCWlmICgkaXRlbSkgew0KCQkJJGl0ZW0gPSBk b19saXN0KCRpdGVtLCAkZGxtKTsNCgkJCS8vIEhhbmRsZSBzdWItY2F0ZWdvcmllcw0KCQkJ aWYgKCRzdWIpIHsNCgkJCQlsaXN0KCRzdWJ0eXBlLCAkbGV2ZWwpID0gZXhwbG9kZSgiOiIs ICRzdWIpOw0KCQkJCSRsZXZlbCA9IChlbXB0eSgkbGV2ZWwpKSA/IDAgOiAkbGV2ZWw7DQoJ CQkJJGxldmVsID0gKHN0cnRvbG93ZXIoJGxldmVsKT09ImFsbCIpID8gOTk5OTkgOiAkbGV2 ZWw7DQoJCQkJZm9yZWFjaCAoJGl0ZW0gYXMgJGNhdCkgew0KCQkJCQkkY2F0cyA9IGdldFRy ZWUoZG9zbGFzaCgkY2F0KSwgJHN1YnR5cGUpOw0KCQkJCQlmb3JlYWNoICgkY2F0cyBhcyAk amR4ID0+ICR2YWwpIHsNCgkJCQkJCWlmICgkY2F0c1skamR4XVsnbGV2ZWwnXSA8PSAkbGV2 ZWwpIHsNCgkJCQkJCQkkaXRlbVtdID0gJGNhdHNbJGpkeF1bJ25hbWUnXTsNCgkJCQkJCX0N CgkJCQkJfQ0KCQkJCX0NCgkJCX0NCg0KCQkJLy8gUXVvdGUgaWYgYXNrZWQNCgkJCSRpdGVt ID0gKCRxdGUpID8gZG9BcnJheSgkaXRlbSwgJ2RvUXVvdGUnKSA6ICRpdGVtOw0KCQkJaWYg KCRtb2QgPT09IDApIHsNCgkJCQkkaW5jID0gYXJyYXlfdW5pcXVlKGFycmF5X21lcmdlKCRp bmMsICRpdGVtKSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRleGMgPSBhcnJheV91bmlxdWUoYXJy YXlfbWVyZ2UoJGV4YywgJGl0ZW0pKTsNCgkJCX0NCgkJfQ0KCX0NCglyZXR1cm4gYXJyYXko JGluYywgJGV4Yyk7DQp9DQp9DQoNCi8vIEFsdGVybmF0aXZlIHRvIHRoZSBjb3JlJ3MgZG9R dW90ZSgpLiBUaGlzIG9uZSBkYmwtcXVvdGVzIGluc3RlYWQgb2Ygc2dsLXF1b3Rlcw0KaWYg KCFmdW5jdGlvbl9leGlzdHMoInNtZF9kb0RibFF1b3RlIikpIHsNCmZ1bmN0aW9uIHNtZF9k b0RibFF1b3RlKCR2YWwpIHsNCglyZXR1cm4gJyInLiR2YWwuJyInOw0KfQ0KfQ0KDQovLyBX b3JrIG91dCB3aGljaCBwYWdlIHRoaXMgZ2FsbGVyeSBpcyBvbiBhbmQgcmV0dXJuIHRoZSBy ZWxldmFudCBpbmZvDQpmdW5jdGlvbiBzbWRfZ2V0UGFnZSgkcnMsICRnYWxsSUQsICRsaW1p dCwgJG9mZnNldCwgJHBhZ2luZykgew0KCWlmICgoJGxpbWl0ID4gMCkgJiYgJHBhZ2luZykg ew0KCQkkbnVtVGh1bXMgPSBjb3VudCgkcnMpOw0KCQkkbnVtUGFnZXMgPSAoJG51bVRodW1z ID4gMCkgPyBjZWlsKCRudW1UaHVtcy8kbGltaXQpIDogMTsNCgkJJHRodW1QYWdlID0gKCFn cHMoJGdhbGxJRCkpID8gMSA6IGdwcygkZ2FsbElEKTsNCgkJJG9mZnNldCA9ICgkdGh1bVBh Z2UgLSAxKSAqICRsaW1pdDsNCgl9IGVsc2Ugew0KCQkvLyBObyBwYWdpbmcgcmVxdWlyZWQN CgkJJG51bVBhZ2VzID0gMTsNCgkJJHRodW1QYWdlID0gMTsNCgl9DQoJcmV0dXJuIGFycmF5 KCRudW1QYWdlcywgJHRodW1QYWdlLCAkb2Zmc2V0KTsNCn0NCg0KLy8gUmVhZCB0aGUgZ2l2 ZW4gZGVsaW1pdGVkIGRpcmVjdG9yaWVzIGFuZCBnZXQgYWxsIGZpbGVzIHRoYXQgbWF0Y2gu DQovLyBHbyBkb3duIGFzIG1hbnkgc3ViZGlyIGxldmVscyBhcyBnaXZlbiBpbiB0aGUgJHN1 YiBwYXJhbWV0ZXINCmZ1bmN0aW9uIHNtZF9kb0RpcmVjdG9yeSgkbHN0LCAkbHZsPTAsICRz dWI9MCwgJG1hdGNoPSIiLCAkZGxtPSIsIiwgJGN0cj0wKSB7DQoJbGlzdCgkZGlyaW5jLCAk ZGlyZXhjKSA9IHNtZF9kb0xpc3QoJGxzdCwgZmFsc2UsICRzdWIsIGZhbHNlLCAkZGxtKTsN CglsaXN0KCRtYXRjaGluYywgJG1hdGNoZXhjKSA9IHNtZF9kb0xpc3QoJG1hdGNoLCBmYWxz ZSwgJycsIGZhbHNlLCAkZGxtKTsNCgkkbWF0Y2hpbmMgPSAiLioiIC4oKCRtYXRjaGluYykg PyAiKCIgLmltcGxvZGUoInwiLCRtYXRjaGluYykuIikrLioiIDogIiIpOw0KCSRtYXRjaGV4 YyA9ICgkbWF0Y2hleGMpID8gIi4qKCIgLmltcGxvZGUoInwiLCRtYXRjaGV4YykuIikrLioi IDogInNtZF9nbHJ5XyIubXRfcmFuZCgpOw0KDQoJJHN1YiA9IChlbXB0eSgkc3ViKSkgPyAw IDogJHN1YjsNCgkkc3ViID0gKHN0cnRvbG93ZXIoJHN1Yik9PSJhbGwiKSA/IDk5OTk5IDog JHN1YjsNCgkkZmlsZUxpc3QgPSBhcnJheSgpOw0KCWZvcmVhY2ggKCRkaXJpbmMgYXMgJGRp cikgew0KCQlpZiAoJGhhbmRsZSA9IEBvcGVuZGlyKCRkaXIpKSB7DQoJCQl3aGlsZSAoKCRm aWxlID0gQHJlYWRkaXIoJGhhbmRsZSkpICE9PSBmYWxzZSkgew0KCQkJCSRmdWxscGF0aCA9 ICRkaXIuRFMuJGZpbGU7DQoJCQkJaWYgKHByZWdfbWF0Y2goIi8iLiRtYXRjaGluYy4iLyIs ICRmdWxscGF0aCkgJiYgIXByZWdfbWF0Y2goIi8iLiRtYXRjaGV4Yy4iLyIsICRmdWxscGF0 aCkpIHsNCgkJCQkJaWYgKGlzX2RpcigkZnVsbHBhdGgpKSB7DQoJCQkJCQlpZiAoKCRmaWxl ID09ICIuIikgfHwgKCRmaWxlPT0gIi4uIikgfHwgKGluX2FycmF5KCRmaWxlLCAkZGlyZXhj KSkgfHwgKCRsdmwgPj0gJHN1YikpIHsNCgkJCQkJCQljb250aW51ZTsNCgkJCQkJCX0gZWxz ZSB7DQoJCQkJCQkJLy8gUmVjdXJzZSB0aGUgc3ViZGlyLiBOb3RlIHRoYXQgdGhlICchJyBp cyB0ZW1wb3JhcmlseSBhZGRlZCBiYWNrIHRvIGVhY2ggZGlyZXhjIGl0ZW0NCgkJCQkJCQkk dG1wID0gJGRpcmV4YzsgLy8gRG9uJ3Qgb3ZlcndyaXRlIHRoZSBvcmlnaW5hbCBhcnJheQ0K CQkJCQkJCWFycmF5X3Vuc2hpZnQoJHRtcCwgJGZ1bGxwYXRoKTsNCgkJCQkJCQkkc3ViRmls ZXMgPSBzbWRfZG9EaXJlY3RvcnkoaW1wbG9kZSgkZGxtLiIhIiwgJHRtcCksICRsdmwrMSwg JHN1YiwgJG1hdGNoLCAkZGxtLCAkY3RyKTsNCgkJCQkJCQkkZmlsZUxpc3QgPSBhcnJheV9t ZXJnZSgkZmlsZUxpc3QsICRzdWJGaWxlcyk7DQoJCQkJCQkJJGN0ciArPSBjb3VudCgkc3Vi RmlsZXMpOw0KCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJfQ0KCQkJCQl9IGVsc2Ugew0KCQkJ CQkJJGZpbGVzdGF0ID0gc3RhdCgkZnVsbHBhdGgpOw0KCQkJCQkJJGltZ3NpemUgPSBnZXRp bWFnZXNpemUoJGZ1bGxwYXRoKTsNCgkJCQkJCSRmaWxlTGlzdFskY3RyXVsncGF0aCddID0g JGRpcjsNCgkJCQkJCSRmaWxlTGlzdFskY3RyXVsnbmFtZSddID0gYmFzZW5hbWUoJGZ1bGxw YXRoKTsNCgkJCQkJCSRmaWxlTGlzdFskY3RyXVsnaWQnXSA9IHByZWdfcmVwbGFjZSgnL1wu LiskLycsICcnLCAkZmlsZSk7DQoJCQkJCQkkZmlsZUxpc3RbJGN0cl1bJ2FsdCddID0gJyc7 DQoJCQkJCQkkZmlsZUxpc3RbJGN0cl1bJ2NhcHRpb24nXSA9ICcnOw0KCQkJCQkJJHBhcnRz ID0gZXhwbG9kZShEUywgJGRpcik7DQoJCQkJCQkkZmlsZUxpc3RbJGN0cl1bJ2NhdGVnb3J5 J10gPSAoY291bnQoJHBhcnRzKSA+IDEpID8gZW5kKCRwYXJ0cykgOiAnJzsNCgkJCQkJCSRm aWxlTGlzdFskY3RyXVsnYXV0aG9yJ10gPSBzdHJ2YWwoJGZpbGVzdGF0Wyd1aWQnXSk7DQoJ CQkJCQkkZmlsZUxpc3RbJGN0cl1bJ2RhdGUnXSA9IHN0cmZ0aW1lKCIlWS0lbS0lZCAlSDol TTolUyIsICRmaWxlc3RhdFsnY3RpbWUnXSk7DQoJCQkJCQkkcGFydHMgPSBleHBsb2RlKCIu IiwgJGZpbGUpOw0KCQkJCQkJJGZpbGVMaXN0WyRjdHJdWydleHQnXSA9IChjb3VudCgkcGFy dHMpID4gMSkgPyAiLiIuZW5kKCRwYXJ0cykgOiAnJzsNCgkJCQkJCSRmaWxlTGlzdFskY3Ry XVsndyddID0gKGlzX2FycmF5KCRpbWdzaXplKSkgPyBzdHJ2YWwoJGltZ3NpemVbMF0pIDog Jyc7DQoJCQkJCQkkZmlsZUxpc3RbJGN0cl1bJ2gnXSA9IChpc19hcnJheSgkaW1nc2l6ZSkp ID8gc3RydmFsKCRpbWdzaXplWzFdKSA6ICcnOw0KCQkJCQl9DQoJCQkJCSRjdHIrKzsNCgkJ CQl9DQoJCQl9DQoJCX0NCgkJaWYgKCRoYW5kbGUpIHsNCgkJCUBjbG9zZWRpcigkaGFuZGxl KTsNCgkJfQ0KCX0NCglyZXR1cm4gJGZpbGVMaXN0Ow0KfQ0KDQppZiAoIWZ1bmN0aW9uX2V4 aXN0cygic21kX3JlbW92ZVFTVmFyIikpIHsNCmZ1bmN0aW9uIHNtZF9yZW1vdmVRU1Zhcigk dXJsLCAka2V5KSB7DQoJJHVybCA9IHByZWdfcmVwbGFjZSgnLyguKikoXD98JiknIC4gJGtl eSAuICc9W14mXSs/KCYpKC4qKS9pJywgJyQxJDIkNCcsICR1cmwgLiAnJicpOw0KCSR1cmwg PSBzdWJzdHIoJHVybCwgMCwgLTEpOw0KCXJldHVybiAoJHVybCk7DQp9DQp9DQoNCmlmICgh ZnVuY3Rpb25fZXhpc3RzKCJzbWRfYWRkUVNWYXIiKSkgew0KZnVuY3Rpb24gc21kX2FkZFFT VmFyKCR1cmwsICRrZXksICR2YWx1ZSkgew0KCSR1cmwgPSBzbWRfcmVtb3ZlUVNWYXIoJHVy bCwgJGtleSk7DQoJaWYgKHN0cnBvcygkdXJsLCAnPycpID09PSBmYWxzZSkgew0KCQlyZXR1 cm4gKCR1cmwgLiAnPycgLiAka2V5IC4gJz0nIC4gJHZhbHVlKTsNCgl9IGVsc2Ugew0KCQly ZXR1cm4gKCR1cmwgLiAnJicgLiAka2V5IC4gJz0nIC4gJHZhbHVlKTsNCgl9DQp9DQp9DQoi O3M6NDoidHlwZSI7czoxOiIwIjtzOjQ6ImhlbHAiO3M6MTkyNDg6Igk8cD48ZGl2IGlkPSJz bWRfaGVscCI+PC9wPgoKCTxoMSBpZD0idG9wIj5zbWRfZ2FsbGVyeTwvaDE+CgoJPGgyIGlk PSJjb250ZW50cyI+Q29udGVudHM8L2gyPgoKCTx1bD4KCQk8bGk+PGEgaHJlZj0iI2ZlYXR1 cmVzIj5GZWF0dXJlczwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjYXV0aG9yIj5BdXRob3I8 L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2luc3RhbGwiPkluc3RhbGxhdGlvbiAvIFVuaW5z dGFsbGF0aW9uPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiN1c2FnZSI+VGFnIHVzYWdlPC9h PgoJPHVsPgoJCTxsaT48YSBocmVmPSIjc21kX2dhbGxlcnkiPnNtZF9nYWxsZXJ5PC9hPjwv bGk+CgkJPGxpPjxhIGhyZWY9IiNnYWxsZXJ5X2Zvcm0iPkdhbGxlcnkgZm9ybTwvYT4KCTx1 bD4KCQk8bGk+PGEgaHJlZj0iI3JlcF9nYWxsZXJ5Ij5SZXBsYWNlbWVudCB0YWdzPC9hPjwv bGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNwYWdpbmdfZm9ybSI+UGFnaW5nIGZv cm08L2E+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9IiNyZXBfcGFnaW5nIj5SZXBsYWNlbWVudCB0 YWdzPC9hPjwvbGk+Cgk8L3VsPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNjb21ib3MiPkNvbWJv czwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY29sbGF0ZV9tb2RlIj5Db2xsYXRlIG1vZGU8 L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2xpYmVydG9y dW0vcmVwX2FydGljbGUiPkZyb20gYW4gYXJ0aWNsZS9UWFA8L2E+PC9saT4KCTwvdWw+PC9s aT4KCQk8bGk+PGEgaHJlZj0iI2V4YW1wbGVzIj5FeGFtcGxlczwvYT48L2xpPgoJCTxsaT48 YSBocmVmPSIjY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0i I2NyZWRpdHMiPkNyZWRpdHM8L2E+PC9saT4KCTwvdWw+CgoJPGgyIGlkPSJmZWF0dXJlcyI+ RmVhdHVyZXM8L2gyPgoKCTx1bD4KCQk8bGk+U3VwcG9ydHMgYWxsIGN1cnJlbnQgYW5kIGZ1 dHVyZSBnYWxsZXJ5IHNjcmlwdHMgaW5jbHVkaW5nIHRodW1icG9wLCByb2xsb3ZlciwgdG9v bHRpcCwgbGlnaHRib3gsIGxpdGVib3gsIHNsaW1ib3gsIG1vb25ib3gsIHRoaWNrYm94LCBz bGlkZXNob3csIGV0YzwvbGk+CgkJPGxpPlB1bGwgaW1hZ2VzIGZyb20gdGhlIDxzcGFuIGNs YXNzPSJjYXBzIj5UWFA8L3NwYW4+IGRhdGFiYXNlIChvciBvcHRpb25hbGx5IGEgbGlzdCBv ZiBkaXJlY3RvcmllcykgdGhhdCBtYXRjaCBjYXRlZ29yaWVzIG9yIElEczwvbGk+CgkJPGxp PlVzZSBhcnRpY2xlIGZpZWxkcyB0byBob2xkIGxpc3RzIG9mIGltYWdlIGNhdGVnb3JpZXMv SURzIGZvciBhcnRpY2xlLXNwZWNpZmljIGdhbGxlcmllczwvbGk+CgkJPGxpPk11bHRpLWxl dmVsIHN1Yi1jYXRlZ29yeSBzdXBwb3J0PC9saT4KCQk8bGk+R2FsbGVyeSBsYXlvdXQgaXMg ZGVmaW5lZCBpbiBhIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IGZvcm08L2xpPgoJ CTxsaT5EaXJlY3QtYWNjZXNzIHBhZ2luYXRpb24gaXMgc3VwcG9ydGVkIGFuZCB0aGUgbGF5 b3V0IG9mIHBhZ2luZyBmZWF0dXJlcyBpcyBjb250cm9sbGVkIGJ5IGEgc2Vjb25kIGZvcm08 L2xpPgoJCTxsaT5Vc2VzIGEgdGFnLXJlcGxhY2VtZW50IHN5c3RlbSBsaWtlIHRoZSB3ZXRf Zm9yX2VhY2hfaW1hZ2UgcGx1Z2luPC9saT4KCTwvdWw+CgoJPGgyIGlkPSJhdXRob3IiPkF1 dGhvcjwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2NvbW1lbnRG b3JtIj5TdGVmIERhd3NvbjwvYT4uIEZvciBvdGhlciBzb2Z0d2FyZSBieSBtZSwgb3IgdG8g bWFrZSBhIGRvbmF0aW9uLCBzZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNv bS9zdyI+c29mdHdhcmUgcGFnZTwvYT4uPC9wPgoKCTxoMiBpZD0iaW5zdGFsbCI+SW5zdGFs bGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2gyPgoKCTxwPkRvd25sb2FkIHRoZSBwbHVnaW4g ZnJvbSBlaXRoZXIgPGEgaHJlZj0iaHR0cDovL3RleHRwYXR0ZXJuLm9yZy9wbHVnaW5zL1hY WC9zbWRfZ2FsbGVyeSI+dGV4dHBhdHRlcm4ub3JnPC9hPiwgb3IgdGhlIDxhIGhyZWY9Imh0 dHA6Ly9zdGVmZGF3c29uLmNvbS9zdyI+c29mdHdhcmUgcGFnZTwvYT4sIHBhc3RlIHRoZSBj b2RlIGludG8gdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IEFkbWluIC0mZ3Q7 IFBsdWdpbnMgcGFuZSwgaW5zdGFsbCBhbmQgZW5hYmxlIHRoZSBwbHVnaW4uIFZpc2l0IHRo ZSA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRlcm4uY29tL3ZpZXd0b3BpYy5waHA/ aWQ9MjYwNzkiPmZvcnVtIHRocmVhZDwvYT4gZm9yIG1vcmUgaW5mbyBvciB0byByZXBvcnQg b24gdGhlIHN1Y2Nlc3Mgb3Igb3RoZXJ3aXNlIG9mIHRoZSBwbHVnaW4uPC9wPgoKCTxwPlRv IHJlbW92ZSB0aGUgcGx1Z2luLCBzaW1wbHkgZGVsZXRlIGl0IGZyb20gdGhlIEFkbWluLSZn dDtQbHVnaW5zIHRhYi48L3A+CgoJPGgyIGlkPSJ1c2FnZSI+VXNhZ2U8L2gyPgoKCTxwPkZv ciBzb21lIGlkZWFzIG9uIHVzYWdlIHNjZW5hcmlvcywgc2VlIHRoZSA8YSBocmVmPSJodHRw Oi8vc3RlZmRhd3Nvbi5jb20vc21kX2dhbGxlcnlfZXhhbXBsZXMudHh0Ij5leGFtcGxlcyBm aWxlPC9hPi48L3A+CgoJPHA+VGhlIGdlbmVyYWwgaWRlYSBpcyB0aGF0IHRoaXMgcGx1Z2lu IGFjdHMgYXMgYSBmbGV4aWJsZSBpbWFnZSBmaWx0ZXI7IG5vdGhpbmcgbW9yZS4gVGhlIHBs dWdpbiBvcHRpb25zIGdvdmVybiB3aGF0IGltYWdlcyBhcmUgcHVsbGVkIG91dCBvZiB0aGUg ZGF0YWJhc2UgYW5kIHRoZXkgYXJlIHNvcnRlZCBpbnRvIHdoYXRldmVyIG9yZGVyIHlvdSBs aWtlLjwvcD4KCgk8cD5BZnRlciB0aGF0LCBlYWNoIGltYWdlICYjODIxMjsgb25lIGJ5IG9u ZSAmIzgyMTI7IGhhcyBhbGwgaXRzIGF0dHJpYnV0ZXMgcGFzc2VkIHRvIHRoZSA8Y29kZT5m b3JtPC9jb2RlPiBvZiB5b3VyIGNob2ljZTsgeW91IHNpbXBseSBjaG9vc2UgdG8gZGlzcGxh eSB3aGljaGV2ZXIgYXR0cmlidXRlcyB5b3UgbGlrZSBpbiB0aGlzIGZvcm0uIFRoaXMgbWVh bnMgYW55IGltYWdlIGF0dHJpYnV0ZXMgY2FuIGJlICYjODIyMDtpbmplY3RlZCYjODIyMTsg ZGlyZWN0bHkgaW50byBhbnkgbWFya3VwOyBpdCBjb3VsZCBiZSA8c3BhbiBjbGFzcz0iY2Fw cyI+VFhQPC9zcGFuPiB0YWdzLCBpdCBjb3VsZCBiZSBjb250ZW50LCBpdCBjb3VsZCBiZSBq YXZhc2NyaXB0LCBvciA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPjsgYW55dGhpbmcu IFBhZ2luYXRpb24gd29ya3MgdGhlIHNhbWUgd2F5LCBhbGxvd2luZyB5b3UgdG8gc3BlY2lm eSBob3cgdXNlcnMgY2FuIHN0ZXAgdGhyb3VnaCB5b3VyIGltYWdlIGdhbGxlcmllcy48L3A+ CgoJPHA+VGhlcmUgaXMgYWxzbyBhIHNwZWNpYWwgbW9kZSBjYWxsZWQgJiM4MjIwO2NvbGxh dGUmIzgyMjE7IHRoYXQgYWxsb3dzIHlvdSB0byBjb2xsZWN0IGFsbCBpbWFnZSBhdHRyaWJ1 dGVzIHRvZ2V0aGVyIGludG8gYSBzZXJpZXMgb2YgYmlnIGxvbmcgbGlzdHMgPGVtPndpdGhv dXQ8L2VtPiBjYWxsaW5nIHRoZSBmb3JtIGV2ZXJ5IHRpbWUuIFRoZSBmb3JtIGlzIHRoZW4g b25seSBwcm9jZXNzZWQgb25jZSBhdCB0aGUgZW5kLjwvcD4KCgk8cD5CZXR3ZWVuIHRoZXNl IHR3byBtb2RlcyB5b3UgPGVtPnNob3VsZDwvZW0+IGJlIGFibGUgdG8gcmVhbGlzZSBhbnkg Z2FsbGVyeWluZyBzb2x1dGlvbjsgbm93IGFuZCBpbiBmdXR1cmUuPC9wPgoKCTxoMyBjbGFz cz0idGFnICIgaWQ9InNtZF9nYWxsZXJ5Ij5zbWRfZ2FsbGVyeTwvaDM+CgoJPHAgY2xhc3M9 InRhZy1zdW1tYXJ5Ij5QbGFjZSBvbmUgb3IgbW9yZSBzbWRfZ2FsbGVyeSB0YWdzIGluIGFu eSBhcnRpY2xlLCBwYWdlIG9yIGZvcm0sIHN1cHBseSBhbnkgb2YgdGhlIGZvbGxvd2luZyBv cHRpb25zIHRvIGNvbmZpZ3VyZSBpdCBhbmQgdXNlIGEgZm9ybSB0byBkZWZpbmUgaG93IHRo ZSBnYWxsZXJ5IGlzIGRpc3BsYXllZC48L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9ImF0 dHJpYnV0ZXMiPkF0dHJpYnV0ZXM8L2g0PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHQtbmFtZSI+aWQ8L3NwYW4+IDogbGlzdCBvZiBpbWFnZSBJRHMgZm9y IGluY2x1c2lvbiBpbiB0aGUgZ2FsbGVyeS4gTWF5IGJlIGludGVnZXJzIG9yIHJhbmdlcywg Zm9yIGV4YW1wbGUgPGNvZGU+aWQ9JnF1b3Q7NSwgNDIsIDgtMTEmcXVvdDs8L2NvZGU+IHdv dWxkIGdyYWIgaW1hZ2VzIDUsIDgsIDksIDEwLCAxMSBhbmQgNDIuIFVzZSBhbiBleGNsYW1h dGlvbiBtYXJrIGluIGZyb250IG9mIGEgbnVtYmVyIG9yIHJhbmdlIHRvIGV4Y2x1ZGUgdGhv c2UgaW1hZ2VzPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPmNhdGVnb3J5PC9zcGFuPiA6IGxpc3Qgb2YgaW1hZ2UgY2F0ZWdv cmllcyBmb3IgaW5jbHVzaW9uIGluIHRoZSBnYWxsZXJ5LiBZb3UgbWF5IHNwZWNpZnkgZml4 ZWQtbmFtZSBjYXRlZ29yaWVzIChlLmcuICYjODIyMDthbmltYWxzJiM4MjIxOykgb3IgYSBx dWVzdGlvbiBtYXJrIGZvbGxvd2VkIGJ5IGFuIGFydGljbGUgZmllbGQgbmFtZS4gZS5nLiA8 Y29kZT5jYXRlZ29yeT0mcXVvdDthbmltYWxzLCBhcnQtP2lkJnF1b3Q7PC9jb2RlPiB3b3Vs ZCBncmFiIGFsbCBpbWFnZXMgZnJvbSB0aGUgY2F0ZWdvcmllcyBjYWxsZWQgJiM4MjIwO2Fu aW1hbHMmIzgyMjE7IGFuZCB0aGUgY2F0ZWdvcnkgY2FsbGVkICYjODIyMDthcnQtNDImIzgy MjE7IChhc3N1bWluZyB0aGUgY3VycmVudCBhcnRpY2xlIGhhcyBhbiBpZCBvZiA0MiBvZiBj b3Vyc2UpLiBVc2UgYW4gZXhjbGFtYXRpb24gbWFyayB0byBleGNsdWRlIHRoZSBnaXZlbiBj YXRlZ29yeSBvciBmaWVsZC4gRmllbGRzIG1heSB0aGVtc2VsdmVzIGNvbnRhaW4gbGlzdHMg b2YgY2F0ZWdvcmllcy4gVGhlID8gZmllbGQgbmFtZXMgbWF5IGJlIGNvbWJpbmVkIChlLmcu ID9zLT9hcnRpY2xlX2ltYWdlKSBidXQgYmUgYXdhcmUgdGhhdCBmaWVsZCBuYW1lcyBtYXkg Y29udGFpbiBzcGFjZXM8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHQtbmFtZSI+c3VibGV2ZWw8L3NwYW4+IDogYW4gaW50ZWdlciB0aGF0 IHNwZWNpZmllcyBob3cgbWFueSA/bGV2ZWxzPyBkb3duIHRvIHRyYXZlcnNlIGVhY2ggbWF0 Y2hpbmcgY2F0ZWdvcnkuIHN1YmxldmVsPSYjODIyMDswJiM4MjIxOyAodGhlIGRlZmF1bHQp IGlzIG9ubHkgdGhlIHRvcC1sZXZlbDsgMSA9IHRvcC1sZXZlbCBwbHVzIHRoZSAxc3Qgc3Vi LWNhdDsgMiA9IHRvcC1sZXZlbCBwbHVzIHRoZSBuZXh0IDIgc3ViLWNhdHMsIGFuZCBzbyBv bi4gc3VibGV2ZWw9JiM4MjIwO2FsbCYjODIyMTsgaXMgYWxsIHN1Yi1jYXRlZ29yaWVzPC9s aT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5h bWUiPnNvcnQ8L3NwYW4+IDogcmUtb3JkZXIgdGhlIGltYWdlcyBieSA8Y29kZT5jYXRlZ29y eTwvY29kZT4gKHRoZSBkZWZhdWx0KSwgPGNvZGU+bmFtZTwvY29kZT4sIDxjb2RlPmRhdGU8 L2NvZGU+LCA8Y29kZT5pZDwvY29kZT4sIGZpbGUgPGNvZGU+ZXh0PC9jb2RlPmVuc2lvbiwg PGNvZGU+YWx0PC9jb2RlPiwgPGNvZGU+Y2FwdGlvbjwvY29kZT4sIDxjb2RlPmF1dGhvcjwv Y29kZT4sIDxjb2RlPndpZHRoPC9jb2RlPiwgPGNvZGU+aGVpZ2h0PC9jb2RlPiBpbiBlaXRo ZXIgPGNvZGU+YXNjPC9jb2RlPmVuZGluZyBvciA8Y29kZT5kZXNjPC9jb2RlPmVuZGluZyBv cmRlci4gVHdvIHNwZWNpYWwgY2FzZXMgZXhpc3Q6IDxjb2RlPmZpeGVkPC9jb2RlPiBtYWlu dGFpbnMgdGhlIG9yZGVyIHlvdSBzcGVjaWZpZWQgaW4gdGhlIGlkIGF0dHJpYnV0ZSwgd2hp bGUgPGNvZGU+cmFuZG9tPC9jb2RlPiBzaHVmZmxlcyB0aGUgb3JkZXIuIE5vdGUgdGhhdCBp ZiA8Y29kZT5yYW5kb208L2NvZGU+IGFwcGVhcnMgYXMgdGhlIGZpcnN0IGl0ZW0gaW4gdGhl IGxpc3QsIHJhbmRvbSBpbWFnZXMgd2lsbCBiZSBwdWxsZWQgZnJvbSB0aGUgZGF0YWJhc2Ug YW5kIHRoZXkgd2lsbCB0aGVuIGJlIHNvcnRlZCBhY2NvcmRpbmcgdG8gdGhlIG9yZGVyIGxp c3RlZCBhZnRlciBpdC4gSWYgPGNvZGU+cmFuZG9tPC9jb2RlPiBhcHBlYXJzIGFueXdoZXJl IGVsc2UgaW4gdGhlIGxpc3QsIGFueSBzb3J0IGl0ZW1zIGJlZm9yZSBpdCB3aWxsIGRldGVy bWluZSB0aGUgb3JkZXIgb2YgZGF0YSBwdWxsZWQgZnJvbSB0aGUgZGF0YWJhc2UsIGFuZCB0 aGUgcmVzdWx0cyB3aWxsIHRoZW4gYmUgb3JkZXJlZCByYW5kb21seSAoaW4gdGhhdCBjYXNl LCBhbnkgaXRlbXMgbGlzdGVkIGFmdGVyIHJhbmRvbSB3aWxsIGJlIGlnbm9yZWQuIDxjb2Rl PmZpeGVkPC9jb2RlPiBpcywgaG93ZXZlciwgc3RpbGwgaG9ub3VyZWQpPC9saT4KCTwvdWw+ Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmxpbWl0 PC9zcGFuPiA6IHRoZSBtYXhpbXVtIG51bWJlciBvZiBpbWFnZXMgdG8gc2hvdyA8ZW0+cGVy IHBhZ2U8L2VtPi4gMCBvciBvbWl0dGVkID0gdW5saW1pdGVkPC9saT4KCTwvdWw+Cgk8dWwg Y2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm1heGxpbWl0PC9z cGFuPiA6IHRoZSBhYnNvbHV0ZSBtYXhpbXVtIG51bWJlciBvZiB0aHVtYm5haWxzIHRvIHB1 bGwgZnJvbSB0aGUgZGF0YWJhc2UuIDAgb3Igb21pdHRlZCA9IHVubGltaXRlZDwvbGk+Cgk8 L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5v ZmZzZXQ8L3NwYW4+IDogc2tpcCB0aGlzIG1hbnkgaW1hZ2VzIGFuZCBzdGFydCBjb3VudGlu ZyB0aGVyZWFmdGVyPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3Bh biBjbGFzcz0iYXR0LW5hbWUiPnRodW1ibGltaXQ8L3NwYW4+IDogdGhlIG1heGltdW0gbnVt YmVyIG9mIHRodW1ibmFpbHMgdG8gc2hvdy4gMCBvciBvbWl0dGVkID0gYWxsIHRodW1icy4g Tm90ZSB0aGF0IHRoaXMgZGlmZmVycyBmcm9tIGxpbWl0OyB5b3UgY2FuIGxhdW5jaCBhIDIw LWltYWdlIGdhbGxlcnkgYnV0IG9ubHkgc2hvdyAxIHRodW1ibmFpbCBvbiB0aGUgcGFnZTwv bGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1u YW1lIj50aHVtYm9mZnNldDwvc3Bhbj4gOiBza2lwIHRoaXMgbWFueSB0aHVtYnMgYmVmb3Jl IGRpc3BsYXlpbmcgPGNvZGU+dGh1bWJsaW1pdDwvY29kZT4gdGh1bWJuYWlsczwvbGk+Cgk8 L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj50 ZXh0PC9zcGFuPiA6IGRpc3BsYXkgdGhlIGdpdmVuIHRleHQgaW5zdGVhZCBvZiB0aHVtYm5h aWxzLiBUaGUgdGV4dCBjYW4gY29udGFpbiA/IGFydGljbGUgZmllbGRzIGxpa2UgPGNvZGU+ Y2F0ZWdvcnk8L2NvZGU+PC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnRodW1iPC9zcGFuPiA6IGRpc3BsYXlzIHRoZSBmdWxs c2l6ZSBwaWMgYXMgYSB0aHVtYm5haWwgaW5zdGVhZCBvZiBhIGZ1bGxzaXplIHBpYyghKTwv bGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1u YW1lIj50aHVtYnNpemU8L3NwYW4+IDogdGFrZXMgb25lIG9yIHR3byBjb21tYS1zZXBhcmF0 ZWQgcGFyYW1ldGVycyB0byBzcGVjaWZ5IHdpZHRoIGFuZC9vciBoZWlnaHQgb2YgYWxsIHlv dXIgZ2FsbGVyeSB0aHVtYm5haWxzLiBUaGUgZGVmYXVsdCBpcyBpbiBwaXhlbHMgaWYgeW91 IGRvbiYjODIxNzt0IHNwZWNpZnkgdW5pdHMuIE1pc3Npbmcgb3V0IG9uZSBvciB0aGUgb3Ro ZXIgcGFyYW1ldGVyIChpLmUuIGhhdmluZyBhbiAmIzgyMjA7ZW1wdHkmIzgyMjE7IHBhcmFt ZXRlciBiZWZvcmUgb3IgYWZ0ZXIgdGhlIGNvbW1hKSB3aWxsIG9ubHkgc2V0IG9uZSBvZiB0 aGUgZGltZW5zaW9ucy4gVXNpbmcgb25seSBvbmUgdmFsdWUsIGJvdGggd2lkdGggYW5kIGhl aWdodCB3aWxsIGJlIHNldCB0byB0aGUgc2FtZSB2YWx1ZTwvbGk+Cgk8L3VsPgoJPHVsIGNs YXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5mb3JtPC9zcGFuPiA6 IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtIHVzZWQgdG8gbGF5b3V0 IHlvdXIgbWF0Y2hpbmcgaW1hZ2VzPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnBhZ2Vmb3JtPC9zcGFuPiA6IHRoZSA8c3Bh biBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBmb3JtIHVzZWQgdG8gc3BlY2lmeSB0aGUgbGF5 b3V0IG9mIHlvdXIgcGFnaW5nIG5hdmlnYXRpb248L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Z2FsbGVyeWlkPC9zcGFuPiA6 IHVuZGVyIG5vcm1hbCBjaXJjdW1zdGFuY2VzIHlvdSBzaG91bGQgbmV2ZXIgbmVlZCB0aGlz LiBFYWNoIGdhbGxlcnkgaXMgYXNzaWduZWQgYSB1bmlxdWUgSUQgYmFzZWQgb24gdGhlIGF0 dHJpYnV0ZXMgeW91IHN1cHBseS4gSW4gdGhlIHVubGlrZWx5IGV2ZW50IHRoYXQgdHdvIGlk ZW50aWNhbCBJRHMgYXJlIGdlbmVyYXRlZCB5b3UgY2FuIG92ZXJyaWRlIHRoZSBJRCBmb3Ig YSBnYWxsZXJ5IHdpdGggdGhpcyBhdHRyaWJ1dGUuIFdoYXQgdGhlIHBsdWdpbiBkb2VzIChp bnRlcm5hbGx5KSBpcyBnZW5lcmF0ZSBhIDMyLWNoYXJhY3RlciBoYXNoIHN0cmluZyBmb3Ig ZWFjaCB0YWcsIHRoZW4gcGlja3MgYSA0LWNoYXIgY29kZSBmcm9tIHRoaXMgc3RyaW5nIChp dCB0YWtlcyBldmVyeSA2dGggY2hhcmFjdGVyIGJ5IGRlZmF1bHQpLiBZb3UgY2FuIHN1cHBs eSBhIHVuaXF1ZSBmaXhlZCBzdHJpbmcgKGUuZy4gPGNvZGU+Z2FsbGVyeWlkPSZxdW90O1Ro ZUdhbGxlcnkyJnF1b3Q7PC9jb2RlPikgb3IgZ2l2ZSBpdCBhIHF1ZXN0aW9uIG1hcmsgYW5k IDIgbnVtYmVycyBzZXBhcmF0ZWQgYnkgYSBjb2xvbiAoZS5nLiA8c3ViPmdhbGxlcnlpZD0m IzgyMjE7PzU6NCYjODIyMTs8L3N1Yj4pLiBUaGUgZmlyc3QgbnVtYmVyIGlzIHRoZSBsZW5n dGggb2YgdGhlIGZpbmFsIHN0cmluZyB0byBnZW5lcmF0ZSwgdGhlIHNlY29uZCBudW1iZXIg aXMgaG93IG1hbnkgY2hhcmFjdGVycyB0byBza2lwIG92ZXIgaW4gdGhlIGZ1bGwgMzItY2hh ciBzdHJpbmcgZWFjaCB0aW1lIGl0IHBpY2tzIG9uZS4gU28gaW4gdGhpcyBjYXNlLCBpdCBn ZW5lcmF0ZXMgYSA1LWNoYXJhY3RlciBzdHJpbmcgZnJvbSB0aGUgY2hhcmFjdGVycyBpdCBm aW5kcyBhdCBwb3NpdGlvbnMgMSw1LDksMTMsIGFuZCAxNy4gSWYgeW91IG9taXQgdGhlIDJu ZCBudW1iZXIgKGUuZy4gPGNvZGU+Z2FsbGVyeWlkPSZxdW90Oz82JnF1b3Q7PC9jb2RlPikg aXQgd2lsbCBhc3N1bWUgaXQmIzgyMTc7cyBhbiBpbmNyZW1lbnQgb2YgMSwgc28gaW4gdGhp cyBjYXNlIGl0JiM4MjE3O2xsIHVzZSB0aGUgMXN0IDYgY2hhcmFjdGVyczwvbGk+Cgk8L3Vs PgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj53cmFw dGFnPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZyB0byBzdXJyb3VuZCB0aGUgZW50aXJlIGdh bGxlcnkuIFNwZWNpZnkgaXQgd2l0aG91dCBhbmdsZSBicmFja2V0cywgZS5nLiA8Y29kZT53 cmFwdGFnPSZxdW90O2RpdiZxdW90OzwvY29kZT4uIERlZmF1bHQgaXMgdW5zZXQgKGkuZS4g bm8gdGFnKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dC1uYW1lIj5icmVhazwvc3Bhbj4gOiB0aGUgKFgpSFRNTCB0YWcgdG8gc3Vycm91 bmQgZWFjaCB0aHVtYm5haWwuIERlZmF1bHQgaXMgdW5zZXQgKGkuZS4gbm8gdGFncyk8L2xp PgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+Y2xhc3M8L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5DU1M8L3NwYW4+IGNs YXNzIG5hbWUgdG8gYXBwbHkgdG8gdGhlIGVudGlyZSBnYWxsZXJ5LiBEZWZhdWx0IGlzIHVu c2V0IChpLmUuIG5vIGNsYXNzKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5uYXZ3cmFwdGFnPC9zcGFuPiA6IHRoZSAoWClI VE1MIHRhZyB0byBzdXJyb3VuZCB0aGUgZW50aXJlIDxjb2RlPnBhZ2Vmb3JtPC9jb2RlPi4g U3BlY2lmeSBpdCB3aXRob3V0IGFuZ2xlIGJyYWNrZXRzLCBlLmcuIDxjb2RlPndyYXB0YWc9 JnF1b3Q7ZGl2JnF1b3Q7PC9jb2RlPi4gRGVmYXVsdCBpcyAmIzgyMjA7dWwmIzgyMjE7PC9s aT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5h bWUiPm5hdmJyZWFrPC9zcGFuPiA6IHRoZSAoWClIVE1MIHRhZyB0byBzdXJyb3VuZCBlYWNo IGl0ZW0gd2l0aGluIHRoZSA8Y29kZT5wYWdlZm9ybTwvY29kZT4uIERlZmF1bHQgaXMgJiM4 MjIwO2xpJiM4MjIxOzwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNw YW4gY2xhc3M9ImF0dC1uYW1lIj5uYXZjbGFzczwvc3Bhbj4gOiB0aGUgPHNwYW4gY2xhc3M9 ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhcHBseSB0byB0aGUgbmF2aWdhdGlv biB3cmFwdGFnLiBEZWZhdWx0IGlzICYjODIyMDtzbWRfZ2FsbGVyeV9uYXYmIzgyMjE7PC9s aT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5h bWUiPmRlbGltPC9zcGFuPiA6IGNoYW5nZSB0aGUgZGVsaW1pdGVyIGZvciBzcGVjaWZ5aW5n IGF0dHJpYnV0ZSBsaXN0cy4gRGVmYXVsdCBpcyBjb21tYSAoLCk8L2xpPgoJPC91bD4KCTx1 bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+cGFyYW1kZWxp bTwvc3Bhbj4gOiBjaGFuZ2UgdGhlIGRlbGltaXRlciBmb3Igc3BlY2lmeWluZyBpbnRlci1w YXJhbWV0ZXIgYXR0cmlidXRlcy4gRGVmYXVsdCBpcyBjb2xvbiAoOik8L2xpPgoJPC91bD4K CTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y29sbGF0 ZTwvc3Bhbj4gOiBzd2l0Y2ggdGhlIHBsdWdpbiBpbnRvIDxhIGhyZWY9IiNjb2xsYXRlX21v ZGUiPmNvbGxhdGUgbW9kZTwvYT48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y29tYm88L3NwYW4+IDogc3BlY2lmeSB5b3Vy IG93biA8YSBocmVmPSIjcmVwX2dhbGxlcnkiPnJlcGxhY2VtZW50IHRhZ3M8L2E+PC9saT4K CTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUi PmRpcmVjdG9yeTwvc3Bhbj4gOiByZWFkIGltYWdlcyBmcm9tIGEgbGlzdCBvZiBkaXJlY3Rv cmllcyAob3IgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj5zKSBpbnN0ZWFkIG9mIHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VFhQPC9zcGFuPiBkYXRhYmFzZTwvbGk+Cgk8L3VsPgoJ PHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5tYXRjaDwv c3Bhbj4gOiBsaW1pdCB0aGUgaW1hZ2VzIGFuZCBkaXJlY3RvcmllcyBjaG9zZW4gaW4gZGly ZWN0b3J5IG1vZGUuIEdpdmUgaXQgYSBsaXN0IG9mIHdvcmRzIHRvIGluY2x1ZGUgb3IgIWV4 Y2x1ZGUgYW5kIGFueSBtYXRjaGluZyBmaWxlcyBvciBkaXJlY3RvcmllcyB3aWxsIGJlIGNo b3NlbiBvciBpZ25vcmVkLCByZXNwZWN0aXZlbHkuIFRoZSBtYXRjaCB0ZXJtcyBhcmUgYXV0 b21hdGljYWxseSBhc3N1bWVkIHRvIGJlICYjODIyMDt3aWxkJiM4MjIxOyBzbyBhbnkgcGFy dCBvZiB0aGUgZmlsZSBuYW1lIC8gcGF0aCB3aWxsIHRyaWdnZXIgdGhlIG1hdGNoPC9saT4K CTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUi PmRlYnVnPC9zcGFuPiA6IHR1cm4gb24gZGlhZ25vc3RpY3MuIFZhcnlpbmcgbGV2ZWxzIG9m IHZlcmJvc2l0eSBmcm9tIDAgKG5vbmUpIHRvIDQgKGEgbG90KTwvbGk+Cgk8L3VsPgoKCTxo MyBpZD0iZ2FsbGVyeV9mb3JtIj5HYWxsZXJ5IGZvcm08L2gzPgoKCTxwPlRoZSA8Y29kZT5m b3JtPC9jb2RlPiBpcyB3aGVyZSB5b3UgZGVzaWduIHdoYXQgZXZlcnkgdGh1bWJuYWlsIHdp bGwgbG9vayBsaWtlIG9uIHRoZSBzY3JlZW4uIFlvdSBkbyB0aGlzIGJ5IHNwZWNpZnlpbmcg bWFya3VwIG9yIHRhZ3MgYXMgbm9ybWFsLiBJbiBrZXkgcGxhY2VzIHdoZXJlIHlvdSB3YW50 LCBzYXksIGFuIGltYWdlIElEIG9yIGFsdCB0YWcgb3IgaW1hZ2Ugd2lkdGggdG8gYmUgZGlz cGxheWVkLCB5b3Ugc3BlY2lmeSBzcGVjaWFsIDxhIGhyZWY9IiNyZXBfZ2FsbGVyeSI+cmVw bGFjZW1lbnQgdGFnczwvYT4uIFRoZXNlIGFyZSByZXBsYWNlZCBmb3IgZWFjaCBpbWFnZSBp biB0dXJuLCB0aHVzIGJ1aWxkaW5nIHVwIHRoZSBnYWxsZXJ5LjwvcD4KCgk8cD5JbiBjb2xs YXRlIG1vZGUsIHRoZSBpbWFnZSBkZXRhaWxzIGFyZSBpbnN0ZWFkIG1hZGUgaW50byBsaXN0 cy4gVGhlIGZvcm0gaXMgb25seSBwcm9jZXNzZWQgb25jZSBhbmQgdGhlIHJlcGxhY2VtZW50 IHRhZ3Mgb3V0cHV0IHRoZSBlbnRpcmUgbGlzdC48L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIg aWQ9InJlcF9nYWxsZXJ5Ij5SZXBsYWNlbWVudCB0YWdzOiBnYWxsZXJ5PC9oND4KCgk8dWwg Y2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntpZH08L3NwYW4+ IDogdGhlIGltYWdlIElEIChvciwgaW4gZGlyZWN0b3J5IG1vZGUsIHRoZSBmaWxlbmFtZSB3 aXRob3V0IGl0cyBleHRlbnNpb24pPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntuYW1lfTwvc3Bhbj4gOiB0aGUgZnVsbCBp bWFnZSBmaWxlbmFtZSBhcyBkZWZpbmVkIGluIHRoZSBkYXRhYmFzZSwgdXN1YWxseSBpbmNs dWRpbmcgZXh0ZW5zaW9uPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48 c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntleHR9PC9zcGFuPiA6IHRoZSBmaWxlIGV4dGVuc2lv biBpbmNsdWRpbmcgcGVyaW9kPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntjYXRlZ29yeX08L3NwYW4+IDogdGhlIGltYWdl IGNhdGVnb3J5PC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPnthdXRob3J9PC9zcGFuPiA6IHdobyB1cGxvYWRlZCB0aGUgaW1h Z2U8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJh dHQtbmFtZSI+e3VybH08L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3Nw YW4+IG9mIHRoZSBmdWxsc2l6ZSBpbWFnZTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRz Ij4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57dGh1bWJ1cmx9PC9zcGFuPiA6IHRo ZSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBvZiB0aGUgdGh1bWJuYWlsPC9saT4K CTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUi PntpbWFnZXBhdGh9PC9zcGFuPiA6IHRoZSBkaXJlY3RvcnkgdGhlIGltYWdlIGlzIGluPC9s aT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5h bWUiPntpbWFnZWRlZn08L3NwYW4+IDoganVzdCB0aGUgZmlsZSBuYW1lIHBhcnQgb2YgdGhl IGltYWdlIChlLmcuIDUuanBnKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57dGh1bWJkZWZ9PC9zcGFuPiA6IGp1c3QgdGhl IGZpbGUgbmFtZSBwYXJ0IG9mIHRoZSB0aHVtYm5haWwgKGUuZy4gNXQuanBnKTwvbGk+Cgk8 L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57 YWx0fTwvc3Bhbj4gOiB0aGUgYWx0IHRleHQ8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0 cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e3RpdGxlfTwvc3Bhbj4gOiB0aGUg Y2FwdGlvbjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dC1uYW1lIj57ZGF0ZX08L3NwYW4+IDogaW1hZ2UgdXBsb2FkIGRhdGU8L2xpPgoJ PC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ e3dpZHRofTwvc3Bhbj4gOiBpbWFnZSB3aWR0aDwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJh dHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57aGVpZ2h0fTwvc3Bhbj4gOiBp bWFnZSBoZWlnaHQ8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFu IGNsYXNzPSJhdHQtbmFtZSI+e3RodW1id2lkdGh9PC9zcGFuPiA6IHRodW1ibmFpbCB3aWR0 aCAoaWYgZGVmaW5lZDogc2VlIDxjb2RlPnRodW1ic2l6ZTwvY29kZT4pPC9saT4KCTwvdWw+ Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnt0aHVt aGVpZ2h0fTwvc3Bhbj4gOiB0aHVtYm5haWwgaGVpZ2h0IChkaXR0byk8L2xpPgoJPC91bD4K CTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e3RodW1i d3VuaXRzfTwvc3Bhbj4gOiB0aHVtYm5haWwgd2lkdGggdW5pdHMgKGUuZy4gcHgsICUsIGVt IGV0Yy4gT25seSBpZiBkZWZpbmVkIHZpYSA8Y29kZT50aHVtYnNpemU8L2NvZGU+KTwvbGk+ Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1l Ij57dGh1bWJodW5pdHN9PC9zcGFuPiA6IHRodW1ibmFpbCBoZWlnaHQgdW5pdHMgKGRpdHRv KTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0 dC1uYW1lIj57aGFzdGh1bWJ9PC9zcGFuPiA6IGlmIHRoZSBpbWFnZSBoYXMgYW4gYXNzb2Np YXRlZCB0aHVtYm5haWwgb3Igbm90IChwcm9iYWJseSBub3QgbXVjaCB1c2UpPC9saT4KCTwv dWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntv YmplY3R9PC9zcGFuPiA6IGEgc3BlY2lhbCBpdGVtIGNvbnRhaW5pbmcgZWl0aGVyIHRoZSA8 Y29kZT50ZXh0PC9jb2RlPiBPUiB0aGUgaW1hZ2UgdGFnIG9mIHRoZSBjb3JyZXNwb25kaW5n IHRodW1ibmFpbCBidXQgb25seSBpZiA8Y29kZT50aHVtYmxpbWl0PC9jb2RlPiBhbGxvd3Mg aXQuIGUuZy4gaWYgPGNvZGU+dGh1bWJsaW1pdD0mcXVvdDsxJnF1b3Q7PC9jb2RlPiB0aGlz IHZhcmlhYmxlIGlzIG9ubHkgc2V0IGZvciB0aGUgZmlyc3QgdGh1bWJuYWlsIGluIHRoZSBs aXN0LiBFdmVyeSBvdGhlciB0aW1lIGl0IGlzIGVtcHR5PC9saT4KCTwvdWw+CgoJPHA+SWYg dGhvc2UgYXJlbiYjODIxNzt0IGVub3VnaCwgeW91IGNhbiA8YSBocmVmPSIjY29tYm9zIj5j cmVhdGUgeW91ciBvd248L2E+IGJ5IGdyb3VwaW5nIGNvbWJpbmF0aW9ucyBvZiB0aGUgYWJv dmUsIG9wdGlvbmFsbHkgd2l0aCBhcnRpY2xlIHZhcmlhYmxlcyBzdWNoIGFzIDxjb2RlPj9l eGNlcnB0PC9jb2RlPiwgPGNvZGU+P2tleXdvcmRzPC9jb2RlPiwgPGNvZGU+P2FydGljbGVf aW1hZ2U8L2NvZGU+LCBldGMuPC9wPgoKCTxoMyBpZD0icGFnaW5nX2Zvcm0iPlBhZ2luZyBm b3JtPC9oMz4KCgk8cD5XaGVuIGFsbCB0aGUgdGh1bWJuYWlscyBoYXZlIGJlZW4gcHJvY2Vz c2VkLCB0aGUgPGNvZGU+cGFnZWZvcm08L2NvZGU+IGlzIHByb2Nlc3NlZCBhbmQgZGlzcGxh eWVkLiBJbiBhIHNpbWlsYXIgbWFubmVyIHRvIHRoZSB3YXkgdGhlIDxhIGhyZWY9IiNnYWxs ZXJ5X2Zvcm0iPmdhbGxlcnkgZm9ybTwvYT4gd29ya3MsIGEgc2VyaWVzIG9mIDxhIGhyZWY9 IiNyZXBfcGFnaW5nIj5SZXBsYWNlbWVudCBUYWdzPC9hPiBnb3Zlcm4gd2hpY2ggZ2FsbGVy eSBuYXZpZ2F0aW9uIGl0ZW1zIGFyZSBhdmFpbGFibGUuIEZvciBleGFtcGxlIHlvdSBjb3Vs ZCBjaG9vc2UgdG8gb25seSBzaG93IG5leHQvcHJldi4gT3IgcGVyaGFwcyAxc3QgcGFnZS9s YXN0IHBhZ2UuIE9yIG51bWJlcmVkIHBhZ2UgbGlua3MuPC9wPgoKCTxoNCBjbGFzcz0iYXR0 cyAiIGlkPSJyZXBfcGFnaW5nIj5SZXBsYWNlbWVudCB0YWdzOiBwYWdpbmc8L2g0PgoKCTx1 bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e25hdmZpcnN0 fTwvc3Bhbj4gOiB0aGUgZmlyc3QgcGFnZSAoZGVmYXVsdCBsYWJlbDogP0ZpcnN0Pyk8L2xp PgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+e25hdnByZXZ9PC9zcGFuPiA6IHRoZSBwcmV2aW91cyBwYWdlIChkZWZhdWx0IGxhYmVs OiA/JmxhcXVvOz8pPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3Bh biBjbGFzcz0iYXR0LW5hbWUiPntuYXZlYXJsaWVyfTwvc3Bhbj4gOiBhbnkgcGFnZSBudW1i ZXJzIGJlZm9yZSB0aGUgY3VycmVudCBwYWdlPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0 dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntuYXZ0aGlzdXJsfTwvc3Bhbj4g OiB0aGUgY3VycmVudCBwYWdlIHdpdGggYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFu PiBsaW5rIHRvIGl0c2VsZjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57bmF2dGhpc308L3NwYW4+IDogdGhlIGN1cnJlbnQg cGFnZSB3aXRob3V0IGEgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gbGluazwvbGk+ Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1l Ij57bmF2bGF0ZXJ9PC9zcGFuPiA6IGFueSBwYWdlIG51bWJlcnMgYWZ0ZXIgdGhlIGN1cnJl bnQgcGFnZTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dC1uYW1lIj57bmF2bmV4dH08L3NwYW4+IDogdGhlIHByZXZpb3VzIHBhZ2UgKGRl ZmF1bHQgbGFiZWw6ID8mcmFxdW87Pyk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e25hdmxhc3R9PC9zcGFuPiA6IHRoZSBs YXN0IHBhZ2UgKGRlZmF1bHQgbGFiZWw6ID9MYXN0Pyk8L2xpPgoJPC91bD4KCgk8cD5UaGUg Y3VycmVudCBwYWdlIGhhcyBhIGZpeGVkIGNsYXNzIG9mID9jdXJyZW50PyBhbmQgZWFjaCBp dGVtIGlzLCBieSBkZWZhdWx0LCBhIDxjb2RlPiZsdDtsaSZndDs8L2NvZGU+IGZvciBlYXN5 IHN0eWxpbmcuIFRvIGF2b2lkIGEgemlsbGlvbiBvcHRpb25zLCBjdXN0b20gbGFiZWxzIGFy ZSBkZWZpbmVkIGRpcmVjdGx5IGluIHRoZSBmb3JtIGl0c2VsZiB0aHVzOjwvcD4KCgk8cD48 Y29kZT57bmF2Zmlyc3Q6MXN0fTwvY29kZT48L3A+CgoJPHA+VGhpcyBhbHNvIGFsbG93cyB5 b3UgdG8gdXNlIDxzcGFuIGNsYXNzPSJjYXBzIj5NTFA8L3NwYW4+IHNuaXBwZXRzLCBlLmcu OjwvcD4KCgk8cD48Y29kZT57bmF2Zmlyc3Q6IyNmaXJzdExhYmVsIyN9PC9jb2RlPjwvcD4K Cgk8cD5Zb3UgY2FuIG92ZXJyaWRlIHRoZSBudW1iZXIgb2YgaXRlbXMgZGlzcGxheWVkIGJ5 IG5hdmVhcmxpZXIgYW5kIG5hdmxhdGVyIGJ5IHNwZWNpZnlpbmcgYSBjb2xvbiBhbmQgYSBu dW1iZXIuIFNvIHRvIG9ubHkgc2hvdyAyIGl0ZW1zIHRvIHRoZSBsZWZ0IG9mIHRoZSBjdXJy ZW50IHBhZ2UgYW5kIDQgaXRlbXMgdG8gdGhlIHJpZ2h0LCB1c2UgPGNvZGU+e25hdmVhcmxp ZXI6Mn0ge25hdmxhdGVyOjR9PC9jb2RlPiBpbiB5b3VyIGZvcm0uIEN1cnJlbnRseSA8Y29k ZT57bmF2ZWFybGllcn08L2NvZGU+IGFuZCA8Y29kZT57bmF2bGF0ZXJ9PC9jb2RlPiBvbmx5 IGRpc3BsYXkgYXJhYmljIG51bWVyYWxzLiBBbnkgaWRlYXMgb24gaG93IHRvIG9mZmVyIG90 aGVyIGNoYXJhY3RlciBzZXRzIGdyZWF0bHkgYXBwcmVjaWF0ZWQuPC9wPgoKCTxoMyBpZD0i Y29tYm9zIj5Db21ib3M8L2gzPgoKCTxoMyBpZD0iY29sbGF0ZV9tb2RlIj5Db2xsYXRlIG1v ZGU8L2gzPgoKCTxwPm1vcmUgaGVscCBzb29uJiM4MjMwOy48L3A+CgoJPHA+PC9kaXY+PC9w Pgo8IS0tIC0tLSBCRUdJTiBQTFVHSU4gQ1NTIC0tLSAtLT4KPHN0eWxlIHR5cGU9InRleHQv Y3NzIj4KI3NtZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCAuYXR0LW5h bWUgeyBmb250LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6 Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFj ZTsgYmFja2dyb3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLnNlZF9jb2Rl X3RhZyB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFj a2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBw eCAyMHB4OyBwYWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6 dmlzaXRlZCB7IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1i b3R0b206IDFweCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAg YTpob3ZlciwgI3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3Jh dGlvbjogbm9uZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90 dG9tOjFweDt9CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3Jn aWEsIHNhbnMtc2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRf aGVscCBoMiB7IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4 IDAgMDsgY29sb3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQoj c21kX2hlbHAgaDMgeyBjb2xvcjogIzEwODAzMDsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBz YW5zLXNlcmlmOyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDE1cHggMCAwO3RleHQt dHJhbnNmb3JtOiB1cHBlcmNhc2U7fQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENT UyAtLS0gLS0+CiI7czozOiJtZDUiO3M6MzI6IjA4YTBiYTA2YWJhMGEzYzNiMTg3MGFlNDA2 YjcwYzFkIjt9