# Name: smd_gallery v0.2 # 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 LmNvbS8iO3M6NzoidmVyc2lvbiI7czozOiIwLjIiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjY5 OiJBKG5vdGhlcikgdGh1bWJuYWlsIGdhbGxlcnkvc2xpZGVzaG93IGNyZWF0b3Igd2l0aCB1 bnJlYWwgZmxleGliaWxpdHkiO3M6NDoiY29kZSI7czoyMzUzNjoiZnVuY3Rpb24gc21kX2dh 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 Y3R9JyA9PiAkb2JqZWN0LA0KCQkJCQkne2dhbGxlcnlpZH0nID0+ICRnYWxsSUQsDQoJCQkJ KTsNCg0KCQkJLy8gQXBwZW5kIGFueSBjb21ib3MNCgkJCWZvcmVhY2ggKCRjb21ib3MgYXMg JGRlZk5hbWUgPT4gJG5ld0RlZikgew0KCQkJCWlmICghYXJyYXlfa2V5X2V4aXN0cygkZGVm TmFtZSwgJHJlcGxhY2VtZW50cykpIHsNCgkJCQkJJHJlcGxhY2VtZW50c1skZGVmTmFtZV0g PSBzdHJ0cigkbmV3RGVmLCAkcmVwbGFjZW1lbnRzKTsNCgkJCQl9DQoJCQl9DQoNCgkJCS8v IFNvbG9zIGFyZSBpdGVtcyBpbiB0aGUgb3V0cHV0IGZvcm0gdGhhdCByZXF1aXJlIGRldGFp bHMgZnJvbSBhIHNwZWNpZmljIHJvdy4gVXNlZnVsIG9ubHkgaW4gY29sbGF0aW9uDQoJCQkv LyBtb2RlLCB0aGV5IGFyZSBhZGRlZCB0byB0aGUgcmVwbGFjZW1lbnRzIGFycmF5IG9uIGFu IGFzLW5lZWRlZCBiYXNpcyB0byBzYXZlIHNwYWNlL3RpbWUNCgkJCSRzb2xvUkUgPSAnL1x7 KFthLXowLTldKykjJy4kY3RyLidcfS8nOw0KCQkJJG51bVNvbG9zID0gcHJlZ19tYXRjaF9h bGwoJHNvbG9SRSwgJHRoaW5nLCAkc29sb3MpOw0KCQkJZm9yICgkc29sb0N0ciA9IDA7ICRz b2xvQ3RyIDwgJG51bVNvbG9zOyAkc29sb0N0cisrKSB7DQoJCQkJJGZpZWxkbmFtZSA9ICd7 Jy4kc29sb3NbMV1bJHNvbG9DdHJdLicjJy4kY3RyLid9JzsNCgkJCQkkZ3JhYmZpZWxkID0g J3snLiRzb2xvc1sxXVskc29sb0N0cl0uJ30nOw0KCQkJCSRyZXBsYWNlbWVudHNbJGZpZWxk bmFtZV0gPSAkcmVwbGFjZW1lbnRzWyRncmFiZmllbGRdOw0KCQkJfQ0KDQoJCQlpZiAoJGRl YnVnID4gMCkgew0KCQkJCWVjaG8gIisrIFJFUExBQ0VNRU5UUyA6IElNQUdFICIuJGN0ci4i ICsrIjsNCgkJCQlkbXAoJHJlcGxhY2VtZW50cyk7DQoJCQl9DQoNCgkJCS8vIEluIGNvbGxh dGUgbW9kZSB0aGUgZm9ybSBpcyBvbmx5IHBhcnNlZCBhdCB0aGUgZW5kOiBidWlsZCBhIGNv bGxvc2FsIG11bHRpLWRpbWVuc2lvbiBhcnJheSBvZiBhbGwgaXRlbXMgaGVyZQ0KCQkJaWYg KCRjb2xsYXRlKSB7DQoJCQkJZm9yZWFjaCAoJHJlcGxhY2VtZW50cyBhcyAkZGVmTmFtZSA9 PiAkZGVmVmFsKSB7DQoJCQkJCSRjb2xsYXRpb25zWyRkZWZOYW1lXVtdID0gJGRlZlZhbDsN CgkJCQl9DQoJCQl9IGVsc2Ugew0KCQkJCSRvdXRbXSA9IHBhcnNlKHN0cnRyKCR0aGluZywg JHJlcGxhY2VtZW50cykpOw0KCQkJfQ0KDQoJCQkkaWR4Kys7DQoJCQkkY3RyKys7DQoJCX0N CgkJaWYgKCRjb2xsYXRlKSB7DQoJCQlmb3JlYWNoICgkY29sbGF0aW9ucyBhcyAkaXRlbSA9 PiAkbGlzdCkgew0KCQkJCS8vIFF1b3RlIHRoZSBsaXN0cyBpZiByZXF1aXJlZA0KCQkJCSRs aXN0ID0gKGVtcHR5KCRkYmxRdW90ZSkgfHwgaW5fYXJyYXkoJGl0ZW0sICRkYmxRdW90ZSkp ID8gZG9BcnJheSgkbGlzdCwgJ3NtZF9kb0RibFF1b3RlJykgOiAkbGlzdDsNCgkJCQkkbGlz dCA9IChlbXB0eSgkc2dsUXVvdGUpIHx8IGluX2FycmF5KCRpdGVtLCAkc2dsUXVvdGUpKSA/ IGRvQXJyYXkoJGxpc3QsICdkb1F1b3RlJykgOiAkbGlzdDsNCgkJCQkkY29sbGF0aW9uc1sk aXRlbV0gPSBpbXBsb2RlKCRkZWxpbSwgJGxpc3QpOw0KCQkJfQ0KCQkJaWYgKCRkZWJ1ZyA+ IDApIHsNCgkJCQllY2hvICIrKyBDT0xMQVRJT05TICsrIjsNCgkJCQlkbXAoJGNvbGxhdGlv bnMpOw0KCQkJfQ0KCQkJJG91dFtdID0gcGFyc2Uoc3RydHIoJHRoaW5nLCAkY29sbGF0aW9u cykpOw0KCQl9DQoNCgkJLy8gQWRkIHRoZSBwYWdpbmcgZmVhdHVyZXMgaWYgcmVxdWlyZWQN CgkJaWYgKCgkbGltaXQgPiAwKSAmJiAkcGFnaW5nKSB7DQoJCQkkbmF2b3V0ID0gYXJyYXko KTsNCgkJCSRuZXh0ID0gKCRudW1QYWdlcyA+IDEgJiYgJHRodW1QYWdlICE9ICRudW1QYWdl cyk7DQoJCQkkcHJldiA9ICgkbnVtUGFnZXMgPiAxICYmICR0aHVtUGFnZSA+IDEpOw0KDQoJ CQkvLyBSZXBsYWNlIGFueSBwYWdpbmcgaW5mbyBpbiB0aGUgcXVlcnkgc3RyaW5nDQoJCQkk cHJldlBhZ2UgPSBzbWRfYWRkUVNWYXIoJHByZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxs SUQsICR0aHVtUGFnZS0xKTsNCgkJCSRuZXh0UGFnZSA9IHNtZF9hZGRRU1ZhcigkcHJldGV4 dFsncmVxdWVzdF91cmknXSwgJGdhbGxJRCwgJHRodW1QYWdlKzEpOw0KCQkJJHRoaXNQYWdl ID0gc21kX2FkZFFTVmFyKCRwcmV0ZXh0WydyZXF1ZXN0X3VyaSddLCAkZ2FsbElELCAkdGh1 bVBhZ2UpOw0KCQkJJGZpcnN0UGFnZSA9IHNtZF9hZGRRU1ZhcigkcHJldGV4dFsncmVxdWVz dF91cmknXSwgJGdhbGxJRCwgMSk7DQoJCQkkbGFzdFBhZ2UgPSBzbWRfYWRkUVNWYXIoJHBy ZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxsSUQsICRudW1QYWdlcyk7DQoNCgkJCS8vIExh YmVscyBjYW4gYmUgc3BlY2lmaWVkIGluIHRoZSByZXBsYWNlbWVudCB0YWcgYWZ0ZXIgYSBw YXJhbWRlbGltLg0KCQkJLy8gJ2VhcmxpZXInIGFuZCAnbGF0ZXInIGRvbid0IGhhdmUgbGFi ZWxzLiBBbnl0aGluZyBzcGVjaWZpZWQgYWZ0ZXIgcGFyYW1kZWxpbSBpcyB0aGUgbWF4IG51 bWJlciBvZiBwYWdlcyB0byBzaG93OyBlbXB0eSA9IGFsbCBwYWdlcw0KCQkJJGxhYmVsID0g YXJyYXkoDQoJCQkJCSd7bmF2Zmlyc3R9JyA9PiAnRmlyc3QnLA0KCQkJCQkne25hdnByZXZ9 JyA9PiAnJmxhcXVvOycsDQoJCQkJCSd7bmF2ZWFybGllcn0nID0+ICcnLA0KCQkJCQkne25h dnRoaXN9JyA9PiAkdGh1bVBhZ2UsDQoJCQkJCSd7bmF2dGhpc3VybH0nID0+ICR0aHVtUGFn ZSwNCgkJCQkJJ3tuYXZsYXRlcn0nID0+ICcnLA0KCQkJCQkne25hdm5leHR9JyA9PiAnJnJh cXVvOycsDQoJCQkJCSd7bmF2bGFzdH0nID0+ICdMYXN0JywNCgkJCQkpOw0KDQoJCQkkbGFi ZWxSRSA9ICcvXHsobmF2W2Etel0rKScuJHBhcmFtZGVsaW0uJyguKz8pXH0vJzsNCgkJCSRu dW1MYWJlbHMgPSBwcmVnX21hdGNoX2FsbCgkbGFiZWxSRSwgJHBhZ2Vmb3JtLCAkbGFiZWxz KTsNCg0KCQkJZm9yICgkbGFiZWxDdHIgPSAwOyAkbGFiZWxDdHIgPCAkbnVtTGFiZWxzOyAk bGFiZWxDdHIrKykgew0KCQkJCSRmaWVsZG5hbWUgPSAneycuJGxhYmVsc1sxXVskbGFiZWxD dHJdLid9JzsNCgkJCQkkbGFiZWxbJGZpZWxkbmFtZV0gPSAkbGFiZWxzWzJdWyRsYWJlbEN0 cl07DQoJCQkJJHBhZ2Vmb3JtID0gc3RyX3JlcGxhY2UoJGxhYmVsc1swXVskbGFiZWxDdHJd LCAneycuJGxhYmVsc1sxXVskbGFiZWxDdHJdLid9JywgJHBhZ2Vmb3JtKTsNCgkJCX0NCg0K CQkJaWYgKCRkZWJ1ZyA+IDEpIHsNCgkJCQllY2hvICIrKyBQQUdJTkcgTEFCRUxTICsrIjsN CgkJCQlkbXAoJGxhYmVsKTsNCgkJCX0NCg0KCQkJLy8gR2VuZXJhdGUgJ2VhcmxpZXInIGFu ZCAnbGF0ZXInIGxpc3RzDQoJCQkkbnVtRWFybGllciA9IGludHZhbCgkbGFiZWxbJ3tuYXZl YXJsaWVyfSddKTsNCgkJCSRudW1MYXRlciA9IGludHZhbCgkbGFiZWxbJ3tuYXZsYXRlcn0n XSk7DQoJCQkkbnVtRWFybGllciA9ICgkbnVtRWFybGllciAmJiAoJHRodW1QYWdlLSRudW1F YXJsaWVyID4gMSkpID8gJG51bUVhcmxpZXIgOiAkdGh1bVBhZ2UtMTsNCgkJCSRudW1MYXRl ciA9ICgkbnVtTGF0ZXIgJiYgKCR0aHVtUGFnZSskbnVtTGF0ZXIgPCAkbnVtUGFnZXMpKSA/ ICRudW1MYXRlciA6ICRudW1QYWdlcy0kdGh1bVBhZ2U7DQoJCQkkbmF2RWFybGllciA9ICRu YXZMYXRlciA9IGFycmF5KCk7DQoJCQlmb3IgKCRpZHggPSAkdGh1bVBhZ2UtJG51bUVhcmxp ZXI7ICRpZHggPCAkdGh1bVBhZ2U7ICRpZHgrKykgew0KCQkJCSRuYXZFYXJsaWVyW10gPSAn PGEgaHJlZj0iJy5zbWRfYWRkUVNWYXIoJHByZXRleHRbJ3JlcXVlc3RfdXJpJ10sICRnYWxs SUQsICRpZHgpLiciPicuJGlkeC4nPC9hPic7DQoJCQl9DQoJCQlmb3IgKCRpZHggPSAkdGh1 bVBhZ2UrMTsgJGlkeCA8PSAkdGh1bVBhZ2UrJG51bUxhdGVyOyAkaWR4KyspIHsNCgkJCQkk bmF2TGF0ZXJbXSA9ICc8YSBocmVmPSInLnNtZF9hZGRRU1ZhcigkcHJldGV4dFsncmVxdWVz dF91cmknXSwgJGdhbGxJRCwgJGlkeCkuJyI+Jy4kaWR4Lic8L2E+JzsNCgkJCX0NCgkJCSRu YXZFYXJsaWVyID0gZG9XcmFwKCRuYXZFYXJsaWVyLCAnJywgJG5hdmJyZWFrLCAnJyk7DQoJ CQkkbmF2TGF0ZXIgPSBkb1dyYXAoJG5hdkxhdGVyLCAnJywgJG5hdmJyZWFrLCAnJyk7DQoN CgkJCS8vIE1ha2UgdXAgdGhlIHJlcGxhY2VtZW50cyBhcnJheSBmb3IgcGFnZWZvcm0NCgkJ CSRyZXBsYWNlbWVudHMgPSBhcnJheSgNCgkJCQkJJ3tuYXZmaXJzdH0nID0+ICgoJHByZXYp ID8gZG9UYWcoJzxhIGhyZWY9IicuJGZpcnN0UGFnZS4nIj4nLiRsYWJlbFsne25hdmZpcnN0 fSddLic8L2E+JywgJG5hdmJyZWFrKSA6IGRvVGFnKCRsYWJlbFsne25hdmZpcnN0fSddLCAk bmF2YnJlYWspKSwNCgkJCQkJJ3tuYXZwcmV2fScgPT4gKCgkcHJldikgPyBkb1RhZygnPGEg aHJlZj0iJy4kcHJldlBhZ2UuJyI+Jy4kbGFiZWxbJ3tuYXZwcmV2fSddLic8L2E+JywgJG5h dmJyZWFrKSA6IGRvVGFnKCRsYWJlbFsne25hdnByZXZ9J10sICRuYXZicmVhaykpLA0KCQkJ CQkne25hdmVhcmxpZXJ9JyA9PiAkbmF2RWFybGllciwNCgkJCQkJJ3tuYXZ0aGlzfScgPT4g ZG9UYWcoJGxhYmVsWyd7bmF2dGhpc30nXSwgJG5hdmJyZWFrLCAnY3VycmVudCcpLA0KCQkJ CQkne25hdnRoaXN1cmx9JyA9PiBkb1RhZygnPGEgaHJlZj0iJy4kdGhpc1BhZ2UuJyI+Jy4k bGFiZWxbJ3tuYXZ0aGlzdXJsfSddLic8L2E+JywgJG5hdmJyZWFrLCAnY3VycmVudCcpLA0K CQkJCQkne25hdmxhdGVyfScgPT4gJG5hdkxhdGVyLA0KCQkJCQkne25hdm5leHR9JyA9PiAo KCRuZXh0KSA/IGRvVGFnKCc8YSBocmVmPSInLiRuZXh0UGFnZS4nIj4nLiRsYWJlbFsne25h dm5leHR9J10uJzwvYT4nLCAkbmF2YnJlYWspIDogZG9UYWcoJGxhYmVsWyd7bmF2bmV4dH0n XSwgJG5hdmJyZWFrKSksDQoJCQkJCSd7bmF2bGFzdH0nID0+ICgoJG5leHQpID8gZG9UYWco JzxhIGhyZWY9IicuJGxhc3RQYWdlLiciPicuJGxhYmVsWyd7bmF2bGFzdH0nXS4nPC9hPics ICRuYXZicmVhaykgOiBkb1RhZygkbGFiZWxbJ3tuYXZsYXN0fSddLCAkbmF2YnJlYWspKSwN CgkJCQkpOw0KDQoJCQlpZiAoJGRlYnVnID4gMCkgew0KCQkJCWVjaG8gIisrIFBBR0lORyBS RVBMQUNFTUVOVFMgKysiOw0KCQkJCWRtcCgkcmVwbGFjZW1lbnRzKTsNCgkJCX0NCgkJCS8v IFBlcmZvcm0gYWxsIHN1YnN0aXR1dGlvbnMgYW5kIHdyYXAgdGhlIGVudGlyZSBsb3QgaWYg cmVxdWlyZWQNCgkJCSRuYXZvdXRbXSA9IHBhcnNlKHN0cnRyKCRwYWdlZm9ybSwgJHJlcGxh Y2VtZW50cykpOw0KCQkJJG91dFtdID0gZG9XcmFwKCRuYXZvdXQsICRuYXZ3cmFwdGFnLCAn JywgJG5hdmNsYXNzKTsNCgkJfQ0KCQlpZiAoJGRlYnVnID4gMikgew0KCQkJZWNobyAiKysg RklOQUwgT1VUUFVUICsrIjsNCgkJCWRtcCgkb3V0KTsNCgkJfQ0KCX0NCg0KCXJldHVybiBk b1dyYXAoJG91dCwgJHdyYXB0YWcsICRicmVhaywgJGNsYXNzKTsNCn0NCg0KLy8gUmV0dXJu IGFuIGV4cGFuZGVkIGxpc3Qgb2YgaXRlbXM6DQovLyAxKSBBbnl0aGluZyBjb250YWluaW5n ICc/JyBvciAnIScgaXMgY2hlY2tlZCBmb3IgYSBtYXRjaCB3aXRoIGEgVFhQIGZpZWxkDQov LyAyKSBBbnkgcmFuZ2VzIG9mIGl0ZW1zIGFyZSBleHBhbmRlZCAoZS5nLiA0LTcgPSA0LDUs Niw3KQ0KLy8gMykgVFhQIGZpZWxkcyBtYXkgdGhlbXNlbHZlcyBiZSBsaXN0cyBvciByYW5n ZXMNCi8vIDQpIEFueXRoaW5nIHRoYXQgaXMgbm90IGEgVFhQIGZpZWxkIGlzIHVzZWQgdmVy YmF0aW0NCi8vIDUpIFRoZSBpdGVtcyBhcmUgcmV0dXJuZWQgYXMgMiBsaXN0czsgaW5jbHVz aW9uIGFuZCBleGNsdXNpb24NCi8vIEFyZ3M6DQovLyAgbHN0ID0gdGhlIGxpc3QgYXMgYSBk ZWxpbWl0ZWQgc3RyaW5nDQovLyAgcm5nID0gd2hldGhlciB0byBhbGxvdyByYW5nZXMgb3Ig bm90IChib29sKQ0KLy8gIHN1YiA9IHRoZSB0eXBlIG9mIHN1YmNhdGVnb3J5IHRvIHRyYXZl cnNlIChpbWFnZSwgZmlsZSwgbGluaywgYXJ0aWNsZSwgbm9uZT0iIikgYW5kIGhvdyBtYW55 IGxldmVscyB0byBnbyBkb3duIChlLmcuIGltYWdlOjIpDQovLyAgcXRlID0gd2hldGhlciB0 byBxdW90ZSBlYWNoIGl0ZW0gaW4gdGhlIGFycmF5IG9yIG5vdCAoYm9vbCkNCi8vICBkbG0g PSB0aGUgZGVsaW1pdGVyIChzdHJpbmcpDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygic21kX2Rv TGlzdCIpKSB7DQpmdW5jdGlvbiBzbWRfZG9MaXN0KCRsc3QsICRybmc9dHJ1ZSwgJHN1Yj0i IiwgJHF0ZT10cnVlLCAkZGxtPSIsIikgew0KCWdsb2JhbCAkdGhpc2FydGljbGUsICRwcmV0 ZXh0Ow0KDQoJJGluYyA9ICRleGMgPSBhcnJheSgpOw0KCSRsc3QgPSBkb19saXN0KCRsc3Qs ICRkbG0pOw0KCSRtb2RSRSA9ICcvKFw/fFwhKShbQS1aYS16MC05X1wtIF0rKS8nOw0KCWZv cmVhY2ggKCRsc3QgYXMgJGl0ZW0pIHsNCgkJJG1vZCA9IDA7IC8vIDAgPSBpbmNsdWRlLCAx ID0gZXhjbHVkZQ0KCQkkbnVtTW9kcyA9IHByZWdfbWF0Y2hfYWxsKCRtb2RSRSwgJGl0ZW0s ICRtb2RzKTsNCg0KCQlmb3IgKCRtb2RDdHIgPSAwOyAkbW9kQ3RyIDwgJG51bU1vZHM7ICRt b2RDdHIrKykgew0KCQkJLy8gbW9kICJ0eXBlIiBpcyBnb3Zlcm5lZCBieSB0aGUgZmlyc3Qg b25lIGZvdW5kIG9ubHkuIGkuZS4gaWYgImFydGljbGUtP2MhcyIgd2FzIHVzZWQgaW4gb25l IGZpZWxkDQoJCQkvLyBpdCB3b3VsZCBiZSBhbiAiaW5jbHVkZSIgb2YgdGhlIHdvcmQgImFy dGljbGUtIiBwbHVzIHRoZSBjYXRlZ29yeSBhbmQgc2VjdGlvbiBjb25jYXRlbmF0ZWQNCgkJ CSRtb2QgPSAoJG1vZHNbMV1bMF0gPT09ICIhIikgPyAxIDogMDsNCgkJCSRtb2RDaGFyID0g JG1vZHNbMV1bJG1vZEN0cl07DQoJCQkkbW9kSXRlbSA9IHRyaW0oJG1vZHNbMl1bJG1vZEN0 cl0pOw0KCQkJJGxvd2l0ZW0gPSBzdHJ0b2xvd2VyKCRtb2RJdGVtKTsNCgkJCWlmIChhcnJh eV9rZXlfZXhpc3RzKCRsb3dpdGVtLCAkcHJldGV4dCkpIHsNCgkJCQkkaXRlbSA9IHN0cl9y ZXBsYWNlKCRtb2RDaGFyLiRtb2RJdGVtLCAkcHJldGV4dFskbG93aXRlbV0sICRpdGVtKTsN CgkJCX0gZWxzZSBpZiAoaXNzZXQoJHRoaXNhcnRpY2xlWyRsb3dpdGVtXSkpIHsNCgkJCQkk aXRlbSA9IHN0cl9yZXBsYWNlKCRtb2RDaGFyLiRtb2RJdGVtLCAkdGhpc2FydGljbGVbJGxv d2l0ZW1dLCAkaXRlbSk7DQoJCQl9IGVsc2Ugew0KCQkJCSRpdGVtID0gc3RyX3JlcGxhY2Uo JG1vZENoYXIuJG1vZEl0ZW0sICRtb2RJdGVtLCAkaXRlbSk7DQoJCQl9DQoJCX0NCg0KCQkv LyBIYW5kbGUgcmFuZ2VzIG9mIHZhbHVlcw0KCQlpZiAoJHJuZyAmJiBwcmVnX21hdGNoKCcv XihcZCspXC0oXGQrKSQvJywgJGl0ZW0pKSB7DQoJCQlsaXN0KCRsbywgJGhpKSA9IGV4cGxv ZGUoIi0iLCAkaXRlbSwgMik7DQoJCQkkaXRlbSA9IGltcGxvZGUoJGRsbSwgcmFuZ2UoJGxv LCAkaGkpKTsNCgkJfQ0KDQoJCS8vIEl0ZW0gbWF5IGJlIGVtcHR5OyBpZ25vcmUgaXQgaWYg c28NCgkJaWYgKCRpdGVtKSB7DQoJCQkkaXRlbSA9IGRvX2xpc3QoJGl0ZW0sICRkbG0pOw0K CQkJLy8gSGFuZGxlIHN1Yi1jYXRlZ29yaWVzDQoJCQlpZiAoJHN1Yikgew0KCQkJCWxpc3Qo JHN1YnR5cGUsICRsZXZlbCkgPSBleHBsb2RlKCI6IiwgJHN1Yik7DQoJCQkJJGxldmVsID0g KGVtcHR5KCRsZXZlbCkpID8gMCA6ICRsZXZlbDsNCgkJCQkkbGV2ZWwgPSAoc3RydG9sb3dl cigkbGV2ZWwpPT0iYWxsIikgPyA5OTk5OSA6ICRsZXZlbDsNCgkJCQlmb3JlYWNoICgkaXRl bSBhcyAkY2F0KSB7DQoJCQkJCSRjYXRzID0gZ2V0VHJlZShkb3NsYXNoKCRjYXQpLCAkc3Vi dHlwZSk7DQoJCQkJCWZvcmVhY2ggKCRjYXRzIGFzICRqZHggPT4gJHZhbCkgew0KCQkJCQkJ aWYgKCRjYXRzWyRqZHhdWydsZXZlbCddIDw9ICRsZXZlbCkgew0KCQkJCQkJCSRpdGVtW10g PSAkY2F0c1skamR4XVsnbmFtZSddOw0KCQkJCQkJfQ0KCQkJCQl9DQoJCQkJfQ0KCQkJfQ0K DQoJCQkvLyBRdW90ZSBpZiBhc2tlZA0KCQkJJGl0ZW0gPSAoJHF0ZSkgPyBkb0FycmF5KCRp dGVtLCAnZG9RdW90ZScpIDogJGl0ZW07DQoJCQlpZiAoJG1vZCA9PT0gMCkgew0KCQkJCSRp bmMgPSBhcnJheV91bmlxdWUoYXJyYXlfbWVyZ2UoJGluYywgJGl0ZW0pKTsNCgkJCX0gZWxz ZSB7DQoJCQkJJGV4YyA9IGFycmF5X3VuaXF1ZShhcnJheV9tZXJnZSgkZXhjLCAkaXRlbSkp Ow0KCQkJfQ0KCQl9DQoJfQ0KCXJldHVybiBhcnJheSgkaW5jLCAkZXhjKTsNCn0NCn0NCg0K Ly8gQWx0ZXJuYXRpdmUgdG8gdGhlIGNvcmUncyBkb1F1b3RlKCkuIFRoaXMgb25lIGRibC1x dW90ZXMgaW5zdGVhZCBvZiBzZ2wtcXVvdGVzDQppZiAoIWZ1bmN0aW9uX2V4aXN0cygic21k X2RvRGJsUXVvdGUiKSkgew0KZnVuY3Rpb24gc21kX2RvRGJsUXVvdGUoJHZhbCkgew0KCXJl dHVybiAnIicuJHZhbC4nIic7DQp9DQp9DQoNCi8vIFdvcmsgb3V0IHdoaWNoIHBhZ2UgdGhp cyBnYWxsZXJ5IGlzIG9uIGFuZCByZXR1cm4gdGhlIHJlbGV2YW50IGluZm8NCmZ1bmN0aW9u IHNtZF9nZXRQYWdlKCRycywgJGdhbGxJRCwgJGxpbWl0LCAkb2Zmc2V0LCAkcGFnaW5nKSB7 DQoJaWYgKCgkbGltaXQgPiAwKSAmJiAkcGFnaW5nKSB7DQoJCSRudW1UaHVtcyA9IGNvdW50 KCRycyk7DQoJCSRudW1QYWdlcyA9ICgkbnVtVGh1bXMgPiAwKSA/IGNlaWwoJG51bVRodW1z LyRsaW1pdCkgOiAxOw0KCQkkdGh1bVBhZ2UgPSAoIWdwcygkZ2FsbElEKSkgPyAxIDogZ3Bz KCRnYWxsSUQpOw0KCQkkb2Zmc2V0ID0gKCR0aHVtUGFnZSAtIDEpICogJGxpbWl0Ow0KCX0g ZWxzZSB7DQoJCS8vIE5vIHBhZ2luZyByZXF1aXJlZA0KCQkkbnVtUGFnZXMgPSAxOw0KCQkk dGh1bVBhZ2UgPSAxOw0KCX0NCglyZXR1cm4gYXJyYXkoJG51bVBhZ2VzLCAkdGh1bVBhZ2Us ICRvZmZzZXQpOw0KfQ0KDQovLyBSZWFkIHRoZSBnaXZlbiBkZWxpbWl0ZWQgZGlyZWN0b3Jp ZXMgYW5kIGdldCBhbGwgZmlsZXMgdGhhdCBtYXRjaC4NCi8vIEdvIGRvd24gYXMgbWFueSBz dWJkaXIgbGV2ZWxzIGFzIGdpdmVuIGluIHRoZSAkc3ViIHBhcmFtZXRlcg0KZnVuY3Rpb24g c21kX2RvRGlyZWN0b3J5KCRsc3QsICRsdmw9MCwgJHN1Yj0wLCAkbWF0Y2g9IiIsICRkbG09 IiwiLCAkY3RyPTApIHsNCglsaXN0KCRkaXJpbmMsICRkaXJleGMpID0gc21kX2RvTGlzdCgk bHN0LCBmYWxzZSwgJHN1YiwgZmFsc2UsICRkbG0pOw0KCWxpc3QoJG1hdGNoaW5jLCAkbWF0 Y2hleGMpID0gc21kX2RvTGlzdCgkbWF0Y2gsIGZhbHNlLCAnJywgZmFsc2UsICRkbG0pOw0K CSRtYXRjaGluYyA9ICIuKiIgLigoJG1hdGNoaW5jKSA/ICIoIiAuaW1wbG9kZSgifCIsJG1h dGNoaW5jKS4iKSsuKiIgOiAiIik7DQoJJG1hdGNoZXhjID0gKCRtYXRjaGV4YykgPyAiLioo IiAuaW1wbG9kZSgifCIsJG1hdGNoZXhjKS4iKSsuKiIgOiAic21kX2dscnlfIi5tdF9yYW5k KCk7DQoNCgkkc3ViID0gKGVtcHR5KCRzdWIpKSA/IDAgOiAkc3ViOw0KCSRzdWIgPSAoc3Ry dG9sb3dlcigkc3ViKT09ImFsbCIpID8gOTk5OTkgOiAkc3ViOw0KCSRmaWxlTGlzdCA9IGFy cmF5KCk7DQoJZm9yZWFjaCAoJGRpcmluYyBhcyAkZGlyKSB7DQoJCWlmICgkaGFuZGxlID0g QG9wZW5kaXIoJGRpcikpIHsNCgkJCXdoaWxlICgoJGZpbGUgPSBAcmVhZGRpcigkaGFuZGxl KSkgIT09IGZhbHNlKSB7DQoJCQkJJGZ1bGxwYXRoID0gJGRpci5EUy4kZmlsZTsNCgkJCQlp ZiAocHJlZ19tYXRjaCgiLyIuJG1hdGNoaW5jLiIvIiwgJGZ1bGxwYXRoKSAmJiAhcHJlZ19t YXRjaCgiLyIuJG1hdGNoZXhjLiIvIiwgJGZ1bGxwYXRoKSkgew0KCQkJCQlpZiAoaXNfZGly KCRmdWxscGF0aCkpIHsNCgkJCQkJCWlmICgoJGZpbGUgPT0gIi4iKSB8fCAoJGZpbGU9PSAi Li4iKSB8fCAoaW5fYXJyYXkoJGZpbGUsICRkaXJleGMpKSB8fCAoJGx2bCA+PSAkc3ViKSkg ew0KCQkJCQkJCWNvbnRpbnVlOw0KCQkJCQkJfSBlbHNlIHsNCgkJCQkJCQkvLyBSZWN1cnNl IHRoZSBzdWJkaXIuIE5vdGUgdGhhdCB0aGUgJyEnIGlzIHRlbXBvcmFyaWx5IGFkZGVkIGJh Y2sgdG8gZWFjaCBkaXJleGMgaXRlbQ0KCQkJCQkJCSR0bXAgPSAkZGlyZXhjOyAvLyBEb24n dCBvdmVyd3JpdGUgdGhlIG9yaWdpbmFsIGFycmF5DQoJCQkJCQkJYXJyYXlfdW5zaGlmdCgk dG1wLCAkZnVsbHBhdGgpOw0KCQkJCQkJCSRzdWJGaWxlcyA9IHNtZF9kb0RpcmVjdG9yeShp bXBsb2RlKCRkbG0uIiEiLCAkdG1wKSwgJGx2bCsxLCAkc3ViLCAkbWF0Y2gsICRkbG0sICRj dHIpOw0KCQkJCQkJCSRmaWxlTGlzdCA9IGFycmF5X21lcmdlKCRmaWxlTGlzdCwgJHN1YkZp bGVzKTsNCgkJCQkJCQkkY3RyICs9IGNvdW50KCRzdWJGaWxlcyk7DQoJCQkJCQkJY29udGlu dWU7DQoJCQkJCQl9DQoJCQkJCX0gZWxzZSB7DQoJCQkJCQkkZmlsZXN0YXQgPSBzdGF0KCRm dWxscGF0aCk7DQoJCQkJCQkkaW1nc2l6ZSA9IGdldGltYWdlc2l6ZSgkZnVsbHBhdGgpOw0K CQkJCQkJJGZpbGVMaXN0WyRjdHJdWydwYXRoJ10gPSAkZGlyOw0KCQkJCQkJJGZpbGVMaXN0 WyRjdHJdWyduYW1lJ10gPSBiYXNlbmFtZSgkZnVsbHBhdGgpOw0KCQkJCQkJJGZpbGVMaXN0 WyRjdHJdWydpZCddID0gcHJlZ19yZXBsYWNlKCcvXC4uKyQvJywgJycsICRmaWxlKTsNCgkJ CQkJCSRmaWxlTGlzdFskY3RyXVsnYWx0J10gPSAnJzsNCgkJCQkJCSRmaWxlTGlzdFskY3Ry XVsnY2FwdGlvbiddID0gJyc7DQoJCQkJCQkkcGFydHMgPSBleHBsb2RlKERTLCAkZGlyKTsN CgkJCQkJCSRmaWxlTGlzdFskY3RyXVsnY2F0ZWdvcnknXSA9IChjb3VudCgkcGFydHMpID4g MSkgPyBlbmQoJHBhcnRzKSA6ICcnOw0KCQkJCQkJJGZpbGVMaXN0WyRjdHJdWydhdXRob3In XSA9IHN0cnZhbCgkZmlsZXN0YXRbJ3VpZCddKTsNCgkJCQkJCSRmaWxlTGlzdFskY3RyXVsn ZGF0ZSddID0gc3RyZnRpbWUoIiVZLSVtLSVkICVIOiVNOiVTIiwgJGZpbGVzdGF0WydjdGlt ZSddKTsNCgkJCQkJCSRwYXJ0cyA9IGV4cGxvZGUoIi4iLCAkZmlsZSk7DQoJCQkJCQkkZmls ZUxpc3RbJGN0cl1bJ2V4dCddID0gKGNvdW50KCRwYXJ0cykgPiAxKSA/ICIuIi5lbmQoJHBh cnRzKSA6ICcnOw0KCQkJCQkJJGZpbGVMaXN0WyRjdHJdWyd3J10gPSAoaXNfYXJyYXkoJGlt Z3NpemUpKSA/IHN0cnZhbCgkaW1nc2l6ZVswXSkgOiAnJzsNCgkJCQkJCSRmaWxlTGlzdFsk Y3RyXVsnaCddID0gKGlzX2FycmF5KCRpbWdzaXplKSkgPyBzdHJ2YWwoJGltZ3NpemVbMV0p IDogJyc7DQoJCQkJCX0NCgkJCQkJJGN0cisrOw0KCQkJCX0NCgkJCX0NCgkJfQ0KCQlpZiAo JGhhbmRsZSkgew0KCQkJQGNsb3NlZGlyKCRoYW5kbGUpOw0KCQl9DQoJfQ0KCXJldHVybiAk ZmlsZUxpc3Q7DQp9DQoNCmlmICghZnVuY3Rpb25fZXhpc3RzKCJzbWRfcmVtb3ZlUVNWYXIi KSkgew0KZnVuY3Rpb24gc21kX3JlbW92ZVFTVmFyKCR1cmwsICRrZXkpIHsNCgkkdXJsID0g cHJlZ19yZXBsYWNlKCcvKC4qKShcP3wmKScgLiAka2V5IC4gJz1bXiZdKz8oJikoLiopL2kn LCAnJDEkMiQ0JywgJHVybCAuICcmJyk7DQoJJHVybCA9IHN1YnN0cigkdXJsLCAwLCAtMSk7 DQoJcmV0dXJuICgkdXJsKTsNCn0NCn0NCg0KaWYgKCFmdW5jdGlvbl9leGlzdHMoInNtZF9h ZGRRU1ZhciIpKSB7DQpmdW5jdGlvbiBzbWRfYWRkUVNWYXIoJHVybCwgJGtleSwgJHZhbHVl KSB7DQoJJHVybCA9IHNtZF9yZW1vdmVRU1ZhcigkdXJsLCAka2V5KTsNCglpZiAoc3RycG9z KCR1cmwsICc/JykgPT09IGZhbHNlKSB7DQoJCXJldHVybiAoJHVybCAuICc/JyAuICRrZXkg LiAnPScgLiAkdmFsdWUpOw0KCX0gZWxzZSB7DQoJCXJldHVybiAoJHVybCAuICcmJyAuICRr ZXkgLiAnPScgLiAkdmFsdWUpOw0KCX0NCn0NCn0NCiI7czo0OiJ0eXBlIjtzOjE6IjAiO3M6 NDoiaGVscCI7czoyMTg1MzoiCTxwPjxkaXYgaWQ9InNtZF9oZWxwIj48L3A+CgoJPGgxIGlk PSJ0b3AiPnNtZF9nYWxsZXJ5PC9oMT4KCgk8aDIgaWQ9ImNvbnRlbnRzIj5Db250ZW50czwv aDI+CgoJPHVsPgoJCTxsaT48YSBocmVmPSIjZmVhdHVyZXMiPkZlYXR1cmVzPC9hPjwvbGk+ CgkJPGxpPjxhIGhyZWY9IiNhdXRob3IiPkF1dGhvcjwvYT48L2xpPgoJCTxsaT48YSBocmVm PSIjaW5zdGFsbCI+SW5zdGFsbGF0aW9uIC8gVW5pbnN0YWxsYXRpb248L2E+PC9saT4KCQk8 bGk+PGEgaHJlZj0iI3VzYWdlIj5UYWcgdXNhZ2U8L2E+Cgk8dWw+CgkJPGxpPjxhIGhyZWY9 IiNzbWRfZ2FsbGVyeSI+c21kX2dhbGxlcnk8L2E+PC9saT4KCQk8bGk+PGEgaHJlZj0iI2dh bGxlcnlfZm9ybSI+R2FsbGVyeSBmb3JtPC9hPgoJPHVsPgoJCTxsaT48YSBocmVmPSIjcmVw X2dhbGxlcnkiPlJlcGxhY2VtZW50IHRhZ3M8L2E+PC9saT4KCTwvdWw+PC9saT4KCQk8bGk+ PGEgaHJlZj0iI3BhZ2luZ19mb3JtIj5QYWdpbmcgZm9ybTwvYT4KCTx1bD4KCQk8bGk+PGEg aHJlZj0iI3JlcF9wYWdpbmciPlJlcGxhY2VtZW50IHRhZ3M8L2E+PC9saT4KCTwvdWw+PC9s aT4KCQk8bGk+PGEgaHJlZj0iI2NvbWJvcyI+Q29tYm9zPC9hPjwvbGk+CgkJPGxpPjxhIGhy ZWY9IiNjb2xsYXRlX21vZGUiPkNvbGxhdGUgbW9kZTwvYT48L2xpPgoJCTxsaT48YSBocmVm PSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vbGliZXJ0b3J1bS9yZXBfYXJ0aWNsZSI+RnJvbSBh biBhcnRpY2xlL1RYUDwvYT48L2xpPgoJPC91bD48L2xpPgoJCTxsaT48YSBocmVmPSIjZXhh bXBsZXMiPkV4YW1wbGVzPC9hPjwvbGk+CgkJPGxpPjxhIGhyZWY9IiNjaGFuZ2Vsb2ciPkNo YW5nZWxvZzwvYT48L2xpPgoJCTxsaT48YSBocmVmPSIjY3JlZGl0cyI+Q3JlZGl0czwvYT48 L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImZlYXR1cmVzIj5GZWF0dXJlczwvaDI+CgoJPHVsPgoJ CTxsaT5TdXBwb3J0cyBhbGwgY3VycmVudCBhbmQgZnV0dXJlIGdhbGxlcnkgc2NyaXB0cyBp bmNsdWRpbmcgdGh1bWJwb3AsIHJvbGxvdmVyLCB0b29sdGlwLCBsaWdodGJveCwgbGl0ZWJv eCwgc2xpbWJveCwgbW9vbmJveCwgdGhpY2tib3gsIHNsaWRlc2hvdywgZXRjPC9saT4KCQk8 bGk+UHVsbCBpbWFnZXMgZnJvbSB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlRYUDwvc3Bhbj4g ZGF0YWJhc2UgKG9yIG9wdGlvbmFsbHkgYSBsaXN0IG9mIGRpcmVjdG9yaWVzKSB0aGF0IG1h dGNoIGNhdGVnb3JpZXMgb3IgSURzPC9saT4KCQk8bGk+VXNlIGFydGljbGUgZmllbGRzIHRv IGhvbGQgbGlzdHMgb2YgaW1hZ2UgY2F0ZWdvcmllcy9JRHMgZm9yIGFydGljbGUtc3BlY2lm aWMgZ2FsbGVyaWVzPC9saT4KCQk8bGk+TXVsdGktbGV2ZWwgc3ViLWNhdGVnb3J5IHN1cHBv cnQ8L2xpPgoJCTxsaT5HYWxsZXJ5IGxheW91dCBpcyBkZWZpbmVkIGluIGEgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gZm9ybTwvbGk+CgkJPGxpPkRpcmVjdC1hY2Nlc3MgcGFn aW5hdGlvbiBpcyBzdXBwb3J0ZWQgYW5kIHRoZSBsYXlvdXQgb2YgcGFnaW5nIGZlYXR1cmVz IGlzIGNvbnRyb2xsZWQgYnkgYSBzZWNvbmQgZm9ybTwvbGk+CgkJPGxpPlVzZXMgYSB0YWct cmVwbGFjZW1lbnQgc3lzdGVtIGxpa2UgdGhlIHdldF9mb3JfZWFjaF9pbWFnZSBwbHVnaW48 L2xpPgoJPC91bD4KCgk8aDIgaWQ9ImF1dGhvciI+QXV0aG9yPC9oMj4KCgk8cD48YSBocmVm PSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vY29tbWVudEZvcm0iPlN0ZWYgRGF3c29uPC9hPi4g Rm9yIG90aGVyIHNvZnR3YXJlIGJ5IG1lLCBvciB0byBtYWtlIGEgZG9uYXRpb24sIHNlZSB0 aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3Ij5zb2Z0d2FyZSBwYWdlPC9h Pi48L3A+CgoJPGgyIGlkPSJpbnN0YWxsIj5JbnN0YWxsYXRpb24gLyBVbmluc3RhbGxhdGlv bjwvaDI+CgoJPHA+RG93bmxvYWQgdGhlIHBsdWdpbiBmcm9tIGVpdGhlciA8YSBocmVmPSJo dHRwOi8vdGV4dHBhdHRlcm4ub3JnL3BsdWdpbnMvWFhYL3NtZF9nYWxsZXJ5Ij50ZXh0cGF0 dGVybi5vcmc8L2E+LCBvciB0aGUgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL3N3 Ij5zb2Z0d2FyZSBwYWdlPC9hPiwgcGFzdGUgdGhlIGNvZGUgaW50byB0aGUgPHNwYW4gY2xh c3M9ImNhcHMiPlRYUDwvc3Bhbj4gQWRtaW4gLSZndDsgUGx1Z2lucyBwYW5lLCBpbnN0YWxs IGFuZCBlbmFibGUgdGhlIHBsdWdpbi4gVmlzaXQgdGhlIDxhIGhyZWY9Imh0dHA6Ly9mb3J1 bS50ZXh0cGF0dGVybi5jb20vdmlld3RvcGljLnBocD9pZD0yNjA3OSI+Zm9ydW0gdGhyZWFk PC9hPiBmb3IgbW9yZSBpbmZvIG9yIHRvIHJlcG9ydCBvbiB0aGUgc3VjY2VzcyBvciBvdGhl cndpc2Ugb2YgdGhlIHBsdWdpbi48L3A+CgoJPHA+VG8gcmVtb3ZlIHRoZSBwbHVnaW4sIHNp bXBseSBkZWxldGUgaXQgZnJvbSB0aGUgQWRtaW4tJmd0O1BsdWdpbnMgdGFiLjwvcD4KCgk8 aDIgaWQ9InVzYWdlIj5Vc2FnZTwvaDI+CgoJPHA+Rm9yIHNvbWUgaWRlYXMgb24gdXNhZ2Ug c2NlbmFyaW9zLCBzZWUgdGhlIDxhIGhyZWY9Imh0dHA6Ly9zdGVmZGF3c29uLmNvbS9zbWRf Z2FsbGVyeV9leGFtcGxlcy50eHQiPmV4YW1wbGVzIGZpbGU8L2E+LjwvcD4KCgk8cD5UaGUg Z2VuZXJhbCBpZGVhIGlzIHRoYXQgdGhpcyBwbHVnaW4gYWN0cyBhcyBhIGZsZXhpYmxlIGlt YWdlIGZpbHRlcjsgbm90aGluZyBtb3JlLiBUaGUgcGx1Z2luIG9wdGlvbnMgZ292ZXJuIHdo YXQgaW1hZ2VzIGFyZSBwdWxsZWQgb3V0IG9mIHRoZSBkYXRhYmFzZSBhbmQgdGhleSBhcmUg c29ydGVkIGludG8gd2hhdGV2ZXIgb3JkZXIgeW91IGxpa2UuPC9wPgoKCTxwPkFmdGVyIHRo YXQsIGVhY2ggaW1hZ2UgJiM4MjEyOyBvbmUgYnkgb25lICYjODIxMjsgaGFzIGFsbCBpdHMg YXR0cmlidXRlcyBwYXNzZWQgdG8gdGhlIDxjb2RlPmZvcm08L2NvZGU+IG9mIHlvdXIgY2hv aWNlOyB5b3Ugc2ltcGx5IGNob29zZSB0byBkaXNwbGF5IHdoaWNoZXZlciBhdHRyaWJ1dGVz IHlvdSBsaWtlIGluIHRoaXMgZm9ybS4gVGhpcyBtZWFucyBhbnkgaW1hZ2UgYXR0cmlidXRl cyBjYW4gYmUgJiM4MjIwO2luamVjdGVkJiM4MjIxOyBkaXJlY3RseSBpbnRvIGFueSBtYXJr dXA7IGl0IGNvdWxkIGJlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3NwYW4+IHRhZ3MsIGl0 IGNvdWxkIGJlIGNvbnRlbnQsIGl0IGNvdWxkIGJlIGphdmFzY3JpcHQsIG9yIDxzcGFuIGNs YXNzPSJjYXBzIj5DU1M8L3NwYW4+OyBhbnl0aGluZy4gUGFnaW5hdGlvbiB3b3JrcyB0aGUg c2FtZSB3YXksIGFsbG93aW5nIHlvdSB0byBzcGVjaWZ5IGhvdyB1c2VycyBjYW4gc3RlcCB0 aHJvdWdoIHlvdXIgaW1hZ2UgZ2FsbGVyaWVzLjwvcD4KCgk8cD5UaGVyZSBpcyBhbHNvIGEg c3BlY2lhbCBtb2RlIGNhbGxlZCAmIzgyMjA7Y29sbGF0ZSYjODIyMTsgdGhhdCBhbGxvd3Mg eW91IHRvIGNvbGxlY3QgYWxsIGltYWdlIGF0dHJpYnV0ZXMgdG9nZXRoZXIgaW50byBhIHNl cmllcyBvZiBiaWcgbG9uZyBsaXN0cyA8ZW0+d2l0aG91dDwvZW0+IGNhbGxpbmcgdGhlIGZv cm0gZXZlcnkgdGltZS4gVGhlIGZvcm0gaXMgdGhlbiBvbmx5IHByb2Nlc3NlZCBvbmNlIGF0 IHRoZSBlbmQuPC9wPgoKCTxwPkJldHdlZW4gdGhlc2UgdHdvIG1vZGVzIHlvdSA8ZW0+c2hv dWxkPC9lbT4gYmUgYWJsZSB0byByZWFsaXNlIGFueSBnYWxsZXJ5aW5nIHNvbHV0aW9uOyBu b3cgYW5kIGluIGZ1dHVyZS48L3A+CgoJPGgzIGNsYXNzPSJ0YWcgIiBpZD0ic21kX2dhbGxl cnkiPnNtZF9nYWxsZXJ5PC9oMz4KCgk8cCBjbGFzcz0idGFnLXN1bW1hcnkiPlBsYWNlIG9u ZSBvciBtb3JlIHNtZF9nYWxsZXJ5IHRhZ3MgaW4gYW55IGFydGljbGUsIHBhZ2Ugb3IgZm9y bSwgc3VwcGx5IGFueSBvZiB0aGUgZm9sbG93aW5nIG9wdGlvbnMgdG8gY29uZmlndXJlIGl0 IGFuZCB1c2UgYSBmb3JtIHRvIGRlZmluZSBob3cgdGhlIGdhbGxlcnkgaXMgZGlzcGxheWVk LjwvcD4KCgk8aDQgY2xhc3M9ImF0dHMgIiBpZD0iYXR0cmlidXRlcyI+QXR0cmlidXRlczwv aDQ+CgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5p ZDwvc3Bhbj4gOiBsaXN0IG9mIGltYWdlIElEcyBmb3IgaW5jbHVzaW9uIGluIHRoZSBnYWxs ZXJ5LiBNYXkgYmUgaW50ZWdlcnMgb3IgcmFuZ2VzLCBmb3IgZXhhbXBsZSA8Y29kZT5pZD0m cXVvdDs1LCA0MiwgOC0xMSZxdW90OzwvY29kZT4gd291bGQgZ3JhYiBpbWFnZXMgNSwgOCwg OSwgMTAsIDExIGFuZCA0Mi4gVXNlIGFuIGV4Y2xhbWF0aW9uIG1hcmsgaW4gZnJvbnQgb2Yg YSBudW1iZXIgb3IgcmFuZ2UgdG8gZXhjbHVkZSB0aG9zZSBpbWFnZXM8L2xpPgoJPC91bD4K CTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+Y2F0ZWdv cnk8L3NwYW4+IDogbGlzdCBvZiBpbWFnZSBjYXRlZ29yaWVzIGZvciBpbmNsdXNpb24gaW4g dGhlIGdhbGxlcnkuIFlvdSBtYXkgc3BlY2lmeSBmaXhlZC1uYW1lIGNhdGVnb3JpZXMgKGUu Zy4gJiM4MjIwO2FuaW1hbHMmIzgyMjE7KSBvciBhIHF1ZXN0aW9uIG1hcmsgZm9sbG93ZWQg YnkgYW4gYXJ0aWNsZSBmaWVsZCBuYW1lLiBlLmcuIDxjb2RlPmNhdGVnb3J5PSZxdW90O2Fu aW1hbHMsIGFydC0/aWQmcXVvdDs8L2NvZGU+IHdvdWxkIGdyYWIgYWxsIGltYWdlcyBmcm9t IHRoZSBjYXRlZ29yaWVzIGNhbGxlZCAmIzgyMjA7YW5pbWFscyYjODIyMTsgYW5kIHRoZSBj YXRlZ29yeSBjYWxsZWQgJiM4MjIwO2FydC00MiYjODIyMTsgKGFzc3VtaW5nIHRoZSBjdXJy ZW50IGFydGljbGUgaGFzIGFuIGlkIG9mIDQyIG9mIGNvdXJzZSkuIFVzZSBhbiBleGNsYW1h dGlvbiBtYXJrIHRvIGV4Y2x1ZGUgdGhlIGdpdmVuIGNhdGVnb3J5IG9yIGZpZWxkLiBGaWVs ZHMgbWF5IHRoZW1zZWx2ZXMgY29udGFpbiBsaXN0cyBvZiBjYXRlZ29yaWVzLiBUaGUgPyBm aWVsZCBuYW1lcyBtYXkgYmUgY29tYmluZWQgKGUuZy4gP3MtP2FydGljbGVfaW1hZ2UpIGJ1 dCBiZSBhd2FyZSB0aGF0IGZpZWxkIG5hbWVzIG1heSBjb250YWluIHNwYWNlczwvbGk+Cgk8 L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5z dWJsZXZlbDwvc3Bhbj4gOiBhbiBpbnRlZ2VyIHRoYXQgc3BlY2lmaWVzIGhvdyBtYW55ID9s ZXZlbHM/IGRvd24gdG8gdHJhdmVyc2UgZWFjaCBtYXRjaGluZyBjYXRlZ29yeS4gc3VibGV2 ZWw9JiM4MjIwOzAmIzgyMjE7ICh0aGUgZGVmYXVsdCkgaXMgb25seSB0aGUgdG9wLWxldmVs OyAxID0gdG9wLWxldmVsIHBsdXMgdGhlIDFzdCBzdWItY2F0OyAyID0gdG9wLWxldmVsIHBs dXMgdGhlIG5leHQgMiBzdWItY2F0cywgYW5kIHNvIG9uLiBzdWJsZXZlbD0mIzgyMjA7YWxs JiM4MjIxOyBpcyBhbGwgc3ViLWNhdGVnb3JpZXM8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+c29ydDwvc3Bhbj4gOiByZS1v cmRlciB0aGUgaW1hZ2VzIGJ5IDxjb2RlPmNhdGVnb3J5PC9jb2RlPiAodGhlIGRlZmF1bHQp LCA8Y29kZT5uYW1lPC9jb2RlPiwgPGNvZGU+ZGF0ZTwvY29kZT4sIDxjb2RlPmlkPC9jb2Rl PiwgZmlsZSA8Y29kZT5leHQ8L2NvZGU+ZW5zaW9uLCA8Y29kZT5hbHQ8L2NvZGU+LCA8Y29k ZT5jYXB0aW9uPC9jb2RlPiwgPGNvZGU+YXV0aG9yPC9jb2RlPiwgPGNvZGU+d2lkdGg8L2Nv ZGU+LCA8Y29kZT5oZWlnaHQ8L2NvZGU+IGluIGVpdGhlciA8Y29kZT5hc2M8L2NvZGU+ZW5k aW5nIG9yIDxjb2RlPmRlc2M8L2NvZGU+ZW5kaW5nIG9yZGVyLiBUd28gc3BlY2lhbCBjYXNl cyBleGlzdDogPGNvZGU+Zml4ZWQ8L2NvZGU+IG1haW50YWlucyB0aGUgb3JkZXIgeW91IHNw ZWNpZmllZCBpbiB0aGUgaWQgYXR0cmlidXRlLCB3aGlsZSA8Y29kZT5yYW5kb208L2NvZGU+ IHNodWZmbGVzIHRoZSBvcmRlci4gTm90ZSB0aGF0IGlmIDxjb2RlPnJhbmRvbTwvY29kZT4g YXBwZWFycyBhcyB0aGUgZmlyc3QgaXRlbSBpbiB0aGUgbGlzdCwgcmFuZG9tIGltYWdlcyB3 aWxsIGJlIHB1bGxlZCBmcm9tIHRoZSBkYXRhYmFzZSBhbmQgdGhleSB3aWxsIHRoZW4gYmUg c29ydGVkIGFjY29yZGluZyB0byB0aGUgb3JkZXIgbGlzdGVkIGFmdGVyIGl0LiBJZiA8Y29k ZT5yYW5kb208L2NvZGU+IGFwcGVhcnMgYW55d2hlcmUgZWxzZSBpbiB0aGUgbGlzdCwgYW55 IHNvcnQgaXRlbXMgYmVmb3JlIGl0IHdpbGwgZGV0ZXJtaW5lIHRoZSBvcmRlciBvZiBkYXRh IHB1bGxlZCBmcm9tIHRoZSBkYXRhYmFzZSwgYW5kIHRoZSByZXN1bHRzIHdpbGwgdGhlbiBi ZSBvcmRlcmVkIHJhbmRvbWx5IChpbiB0aGF0IGNhc2UsIGFueSBpdGVtcyBsaXN0ZWQgYWZ0 ZXIgcmFuZG9tIHdpbGwgYmUgaWdub3JlZC4gPGNvZGU+Zml4ZWQ8L2NvZGU+IGlzLCBob3dl dmVyLCBzdGlsbCBob25vdXJlZCk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+bGltaXQ8L3NwYW4+IDogdGhlIG1heGltdW0g bnVtYmVyIG9mIGltYWdlcyB0byBzaG93IDxlbT5wZXIgcGFnZTwvZW0+LiAwIG9yIG9taXR0 ZWQgPSB1bmxpbWl0ZWQ8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHQtbmFtZSI+bWF4bGltaXQ8L3NwYW4+IDogdGhlIGFic29sdXRlIG1h eGltdW0gbnVtYmVyIG9mIHRodW1ibmFpbHMgdG8gcHVsbCBmcm9tIHRoZSBkYXRhYmFzZS4g MCBvciBvbWl0dGVkID0gdW5saW1pdGVkPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMi PgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm9mZnNldDwvc3Bhbj4gOiBza2lwIHRo aXMgbWFueSBpbWFnZXMgYW5kIHN0YXJ0IGNvdW50aW5nIHRoZXJlYWZ0ZXI8L2xpPgoJPC91 bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+dGh1 bWJsaW1pdDwvc3Bhbj4gOiB0aGUgbWF4aW11bSBudW1iZXIgb2YgdGh1bWJuYWlscyB0byBz aG93LiAwIG9yIG9taXR0ZWQgPSBhbGwgdGh1bWJzLiBOb3RlIHRoYXQgdGhpcyBkaWZmZXJz IGZyb20gbGltaXQ7IHlvdSBjYW4gbGF1bmNoIGEgMjAtaW1hZ2UgZ2FsbGVyeSBidXQgb25s eSBzaG93IDEgdGh1bWJuYWlsIG9uIHRoZSBwYWdlPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9 ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnRodW1ib2Zmc2V0PC9zcGFu PiA6IHNraXAgdGhpcyBtYW55IHRodW1icyBiZWZvcmUgZGlzcGxheWluZyA8Y29kZT50aHVt YmxpbWl0PC9jb2RlPiB0aHVtYm5haWxzPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMi PgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnRleHQ8L3NwYW4+IDogZGlzcGxheSB0 aGUgZ2l2ZW4gdGV4dCBpbnN0ZWFkIG9mIHRodW1ibmFpbHMuIFRoZSB0ZXh0IGNhbiBjb250 YWluID8gYXJ0aWNsZSBmaWVsZHMgbGlrZSA8Y29kZT5jYXRlZ29yeTwvY29kZT48L2xpPgoJ PC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ dGh1bWI8L3NwYW4+IDogZGlzcGxheXMgdGhlIGZ1bGxzaXplIHBpYyBhcyBhIHRodW1ibmFp bCBpbnN0ZWFkIG9mIGEgZnVsbHNpemUgcGljKCEpPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9 ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnRodW1ic2l6ZTwvc3Bhbj4g OiB0YWtlcyBvbmUgb3IgdHdvIGNvbW1hLXNlcGFyYXRlZCBwYXJhbWV0ZXJzIHRvIHNwZWNp Znkgd2lkdGggYW5kL29yIGhlaWdodCBvZiBhbGwgeW91ciBnYWxsZXJ5IHRodW1ibmFpbHMu IFRoZSBkZWZhdWx0IGlzIGluIHBpeGVscyBpZiB5b3UgZG9uJiM4MjE3O3Qgc3BlY2lmeSB1 bml0cy4gTWlzc2luZyBvdXQgb25lIG9yIHRoZSBvdGhlciBwYXJhbWV0ZXIgKGkuZS4gaGF2 aW5nIGFuICYjODIyMDtlbXB0eSYjODIyMTsgcGFyYW1ldGVyIGJlZm9yZSBvciBhZnRlciB0 aGUgY29tbWEpIHdpbGwgb25seSBzZXQgb25lIG9mIHRoZSBkaW1lbnNpb25zLiBVc2luZyBv bmx5IG9uZSB2YWx1ZSwgYm90aCB3aWR0aCBhbmQgaGVpZ2h0IHdpbGwgYmUgc2V0IHRvIHRo ZSBzYW1lIHZhbHVlPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3Bh biBjbGFzcz0iYXR0LW5hbWUiPmZvcm08L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBz Ij5UWFA8L3NwYW4+IGZvcm0gdXNlZCB0byBsYXlvdXQgeW91ciBtYXRjaGluZyBpbWFnZXM8 L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQt bmFtZSI+cGFnZWZvcm08L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5UWFA8L3Nw YW4+IGZvcm0gdXNlZCB0byBzcGVjaWZ5IHRoZSBsYXlvdXQgb2YgeW91ciBwYWdpbmcgbmF2 aWdhdGlvbjwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xh c3M9ImF0dC1uYW1lIj5nYWxsZXJ5aWQ8L3NwYW4+IDogdW5kZXIgbm9ybWFsIGNpcmN1bXN0 YW5jZXMgeW91IHNob3VsZCBuZXZlciBuZWVkIHRoaXMuIEVhY2ggZ2FsbGVyeSBpcyBhc3Np Z25lZCBhIHVuaXF1ZSBJRCBiYXNlZCBvbiB0aGUgYXR0cmlidXRlcyB5b3Ugc3VwcGx5LiBJ biB0aGUgdW5saWtlbHkgZXZlbnQgdGhhdCB0d28gaWRlbnRpY2FsIElEcyBhcmUgZ2VuZXJh dGVkIHlvdSBjYW4gb3ZlcnJpZGUgdGhlIElEIGZvciBhIGdhbGxlcnkgd2l0aCB0aGlzIGF0 dHJpYnV0ZS4gV2hhdCB0aGUgcGx1Z2luIGRvZXMgKGludGVybmFsbHkpIGlzIGdlbmVyYXRl IGEgMzItY2hhcmFjdGVyIGhhc2ggc3RyaW5nIGZvciBlYWNoIHRhZywgdGhlbiBwaWNrcyBh IDQtY2hhciBjb2RlIGZyb20gdGhpcyBzdHJpbmcgKGl0IHRha2VzIGV2ZXJ5IDZ0aCBjaGFy YWN0ZXIgYnkgZGVmYXVsdCkuIFlvdSBjYW4gc3VwcGx5IGEgdW5pcXVlIGZpeGVkIHN0cmlu ZyAoZS5nLiA8Y29kZT5nYWxsZXJ5aWQ9JnF1b3Q7VGhlR2FsbGVyeTImcXVvdDs8L2NvZGU+ KSBvciBnaXZlIGl0IGEgcXVlc3Rpb24gbWFyayBhbmQgMiBudW1iZXJzIHNlcGFyYXRlZCBi eSBhIGNvbG9uIChlLmcuIDxzdWI+Z2FsbGVyeWlkPSYjODIyMTs/NTo0JiM4MjIxOzwvc3Vi PikuIFRoZSBmaXJzdCBudW1iZXIgaXMgdGhlIGxlbmd0aCBvZiB0aGUgZmluYWwgc3RyaW5n IHRvIGdlbmVyYXRlLCB0aGUgc2Vjb25kIG51bWJlciBpcyBob3cgbWFueSBjaGFyYWN0ZXJz IHRvIHNraXAgb3ZlciBpbiB0aGUgZnVsbCAzMi1jaGFyIHN0cmluZyBlYWNoIHRpbWUgaXQg cGlja3Mgb25lLiBTbyBpbiB0aGlzIGNhc2UsIGl0IGdlbmVyYXRlcyBhIDUtY2hhcmFjdGVy IHN0cmluZyBmcm9tIHRoZSBjaGFyYWN0ZXJzIGl0IGZpbmRzIGF0IHBvc2l0aW9ucyAxLDUs OSwxMywgYW5kIDE3LiBJZiB5b3Ugb21pdCB0aGUgMm5kIG51bWJlciAoZS5nLiA8Y29kZT5n YWxsZXJ5aWQ9JnF1b3Q7PzYmcXVvdDs8L2NvZGU+KSBpdCB3aWxsIGFzc3VtZSBpdCYjODIx NztzIGFuIGluY3JlbWVudCBvZiAxLCBzbyBpbiB0aGlzIGNhc2UgaXQmIzgyMTc7bGwgdXNl IHRoZSAxc3QgNiBjaGFyYWN0ZXJzPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJ CTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPndyYXB0YWc8L3NwYW4+IDogdGhlIChYKUhU TUwgdGFnIHRvIHN1cnJvdW5kIHRoZSBlbnRpcmUgZ2FsbGVyeS4gU3BlY2lmeSBpdCB3aXRo b3V0IGFuZ2xlIGJyYWNrZXRzLCBlLmcuIDxjb2RlPndyYXB0YWc9JnF1b3Q7ZGl2JnF1b3Q7 PC9jb2RlPi4gRGVmYXVsdCBpcyB1bnNldCAoaS5lLiBubyB0YWcpPC9saT4KCTwvdWw+Cgk8 dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPmJyZWFrPC9z cGFuPiA6IHRoZSAoWClIVE1MIHRhZyB0byBzdXJyb3VuZCBlYWNoIHRodW1ibmFpbC4gRGVm YXVsdCBpcyB1bnNldCAoaS5lLiBubyB0YWdzKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJh dHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5jbGFzczwvc3Bhbj4gOiB0aGUg PHNwYW4gY2xhc3M9ImNhcHMiPkNTUzwvc3Bhbj4gY2xhc3MgbmFtZSB0byBhcHBseSB0byB0 aGUgZW50aXJlIGdhbGxlcnkuIERlZmF1bHQgaXMgdW5zZXQgKGkuZS4gbm8gY2xhc3MpPC9s aT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5h bWUiPm5hdndyYXB0YWc8L3NwYW4+IDogdGhlIChYKUhUTUwgdGFnIHRvIHN1cnJvdW5kIHRo ZSBlbnRpcmUgPGNvZGU+cGFnZWZvcm08L2NvZGU+LiBTcGVjaWZ5IGl0IHdpdGhvdXQgYW5n bGUgYnJhY2tldHMsIGUuZy4gPGNvZGU+d3JhcHRhZz0mcXVvdDtkaXYmcXVvdDs8L2NvZGU+ LiBEZWZhdWx0IGlzICYjODIyMDt1bCYjODIyMTs8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+bmF2YnJlYWs8L3NwYW4+IDog dGhlIChYKUhUTUwgdGFnIHRvIHN1cnJvdW5kIGVhY2ggaXRlbSB3aXRoaW4gdGhlIDxjb2Rl PnBhZ2Vmb3JtPC9jb2RlPi4gRGVmYXVsdCBpcyAmIzgyMjA7bGkmIzgyMjE7PC9saT4KCTwv dWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm5h dmNsYXNzPC9zcGFuPiA6IHRoZSA8c3BhbiBjbGFzcz0iY2FwcyI+Q1NTPC9zcGFuPiBjbGFz cyBuYW1lIHRvIGFwcGx5IHRvIHRoZSBuYXZpZ2F0aW9uIHdyYXB0YWcuIERlZmF1bHQgaXMg JiM4MjIwO3NtZF9nYWxsZXJ5X25hdiYjODIyMTs8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZGVsaW08L3NwYW4+IDogY2hh bmdlIHRoZSBkZWxpbWl0ZXIgZm9yIHNwZWNpZnlpbmcgYXR0cmlidXRlIGxpc3RzLiBEZWZh dWx0IGlzIGNvbW1hICgsKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5wYXJhbWRlbGltPC9zcGFuPiA6IGNoYW5nZSB0aGUg ZGVsaW1pdGVyIGZvciBzcGVjaWZ5aW5nIGludGVyLXBhcmFtZXRlciBhdHRyaWJ1dGVzLiBE ZWZhdWx0IGlzIGNvbG9uICg6KTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj5jb2xsYXRlPC9zcGFuPiA6IHN3aXRjaCB0aGUg cGx1Z2luIGludG8gPGEgaHJlZj0iI2NvbGxhdGVfbW9kZSI+Y29sbGF0ZSBtb2RlPC9hPjwv bGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1u YW1lIj5jb21ibzwvc3Bhbj4gOiBzcGVjaWZ5IHlvdXIgb3duIDxhIGhyZWY9IiNyZXBfZ2Fs bGVyeSI+cmVwbGFjZW1lbnQgdGFnczwvYT48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0 cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZGlyZWN0b3J5PC9zcGFuPiA6IHJl YWQgaW1hZ2VzIGZyb20gYSBsaXN0IG9mIGRpcmVjdG9yaWVzIChvciA8c3BhbiBjbGFzcz0i Y2FwcyI+VVJMPC9zcGFuPnMpIGluc3RlYWQgb2YgdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5U WFA8L3NwYW4+IGRhdGFiYXNlPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxs aT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPm1hdGNoPC9zcGFuPiA6IGxpbWl0IHRoZSBpbWFn ZXMgYW5kIGRpcmVjdG9yaWVzIGNob3NlbiBpbiBkaXJlY3RvcnkgbW9kZS4gR2l2ZSBpdCBh IGxpc3Qgb2Ygd29yZHMgdG8gaW5jbHVkZSBvciAhZXhjbHVkZSBhbmQgYW55IG1hdGNoaW5n IGZpbGVzIG9yIGRpcmVjdG9yaWVzIHdpbGwgYmUgY2hvc2VuIG9yIGlnbm9yZWQsIHJlc3Bl Y3RpdmVseS4gVGhlIG1hdGNoIHRlcm1zIGFyZSBhdXRvbWF0aWNhbGx5IGFzc3VtZWQgdG8g YmUgJiM4MjIwO3dpbGQmIzgyMjE7IHNvIGFueSBwYXJ0IG9mIHRoZSBmaWxlIG5hbWUgLyBw YXRoIHdpbGwgdHJpZ2dlciB0aGUgbWF0Y2g8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0 cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ZGVidWc8L3NwYW4+IDogdHVybiBv biBkaWFnbm9zdGljcy4gVmFyeWluZyBsZXZlbHMgb2YgdmVyYm9zaXR5IGZyb20gMCAobm9u ZSkgdG8gNCAoYSBsb3QpPC9saT4KCTwvdWw+CgoJPGgzIGlkPSJnYWxsZXJ5X2Zvcm0iPkdh bGxlcnkgZm9ybTwvaDM+CgoJPHA+VGhlIDxjb2RlPmZvcm08L2NvZGU+IGlzIHdoZXJlIHlv dSBkZXNpZ24gd2hhdCBldmVyeSB0aHVtYm5haWwgd2lsbCBsb29rIGxpa2Ugb24gdGhlIHNj cmVlbi4gWW91IGRvIHRoaXMgYnkgc3BlY2lmeWluZyBtYXJrdXAgb3IgdGFncyBhcyBub3Jt YWwuIEluIGtleSBwbGFjZXMgd2hlcmUgeW91IHdhbnQsIHNheSwgYW4gaW1hZ2UgSUQgb3Ig YWx0IHRhZyBvciBpbWFnZSB3aWR0aCB0byBiZSBkaXNwbGF5ZWQsIHlvdSBzcGVjaWZ5IHNw ZWNpYWwgPGEgaHJlZj0iI3JlcF9nYWxsZXJ5Ij5yZXBsYWNlbWVudCB0YWdzPC9hPi4gVGhl c2UgYXJlIHJlcGxhY2VkIGZvciBlYWNoIGltYWdlIGluIHR1cm4sIHRodXMgYnVpbGRpbmcg dXAgdGhlIGdhbGxlcnkuPC9wPgoKCTxwPkluIGNvbGxhdGUgbW9kZSwgdGhlIGltYWdlIGRl dGFpbHMgYXJlIGluc3RlYWQgbWFkZSBpbnRvIGxpc3RzLiBUaGUgZm9ybSBpcyBvbmx5IHBy b2Nlc3NlZCBvbmNlIGFuZCB0aGUgcmVwbGFjZW1lbnQgdGFncyBvdXRwdXQgdGhlIGVudGly ZSBsaXN0LjwvcD4KCgk8aDQgY2xhc3M9ImF0dHMgIiBpZD0icmVwX2dhbGxlcnkiPlJlcGxh Y2VtZW50IHRhZ3M6IGdhbGxlcnk8L2g0PgoKCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxz cGFuIGNsYXNzPSJhdHQtbmFtZSI+e2lkfTwvc3Bhbj4gOiB0aGUgaW1hZ2UgSUQgKG9yLCBp biBkaXJlY3RvcnkgbW9kZSwgdGhlIGZpbGVuYW1lIHdpdGhvdXQgaXRzIGV4dGVuc2lvbik8 L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQt bmFtZSI+e25hbWV9PC9zcGFuPiA6IHRoZSBmdWxsIGltYWdlIGZpbGVuYW1lIGFzIGRlZmlu ZWQgaW4gdGhlIGRhdGFiYXNlLCB1c3VhbGx5IGluY2x1ZGluZyBleHRlbnNpb248L2xpPgoJ PC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+ e2V4dH08L3NwYW4+IDogdGhlIGZpbGUgZXh0ZW5zaW9uIGluY2x1ZGluZyBwZXJpb2Q8L2xp PgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFt ZSI+e2NhdGVnb3J5fTwvc3Bhbj4gOiB0aGUgaW1hZ2UgY2F0ZWdvcnk8L2xpPgoJPC91bD4K CTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e2F1dGhv cn08L3NwYW4+IDogd2hvIHVwbG9hZGVkIHRoZSBpbWFnZTwvbGk+Cgk8L3VsPgoJPHVsIGNs YXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57dXJsfTwvc3Bhbj4g OiB0aGUgPHNwYW4gY2xhc3M9ImNhcHMiPlVSTDwvc3Bhbj4gb2YgdGhlIGZ1bGxzaXplIGlt YWdlPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0i YXR0LW5hbWUiPnt0aHVtYnVybH08L3NwYW4+IDogdGhlIDxzcGFuIGNsYXNzPSJjYXBzIj5V Ukw8L3NwYW4+IG9mIHRoZSB0aHVtYm5haWw8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0 cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e2ltYWdlcGF0aH08L3NwYW4+IDog dGhlIGRpcmVjdG9yeSB0aGUgaW1hZ2UgaXMgaW48L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0i YXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e2ltYWdlZGVmfTwvc3Bhbj4g OiBqdXN0IHRoZSBmaWxlIG5hbWUgcGFydCBvZiB0aGUgaW1hZ2UgKGUuZy4gNS5qcGcpPC9s aT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5h bWUiPnt0aHVtYmRlZn08L3NwYW4+IDoganVzdCB0aGUgZmlsZSBuYW1lIHBhcnQgb2YgdGhl IHRodW1ibmFpbCAoZS5nLiA1dC5qcGcpPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMi PgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnthbHR9PC9zcGFuPiA6IHRoZSBhbHQg dGV4dDwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9 ImF0dC1uYW1lIj57dGl0bGV9PC9zcGFuPiA6IHRoZSBjYXB0aW9uPC9saT4KCTwvdWw+Cgk8 dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntkYXRlfTwv c3Bhbj4gOiBpbWFnZSB1cGxvYWQgZGF0ZTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRz Ij4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57d2lkdGh9PC9zcGFuPiA6IGltYWdl IHdpZHRoPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFz cz0iYXR0LW5hbWUiPntoZWlnaHR9PC9zcGFuPiA6IGltYWdlIGhlaWdodDwvbGk+Cgk8L3Vs PgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57dGh1 bWJ3aWR0aH08L3NwYW4+IDogdGh1bWJuYWlsIHdpZHRoIChpZiBkZWZpbmVkOiBzZWUgPGNv ZGU+dGh1bWJzaXplPC9jb2RlPik8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e3RodW1oZWlnaHR9PC9zcGFuPiA6IHRodW1i bmFpbCBoZWlnaHQgKGRpdHRvKTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8 bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57dGh1bWJ3dW5pdHN9PC9zcGFuPiA6IHRodW1i bmFpbCB3aWR0aCB1bml0cyAoZS5nLiBweCwgJSwgZW0gZXRjLiBPbmx5IGlmIGRlZmluZWQg dmlhIDxjb2RlPnRodW1ic2l6ZTwvY29kZT4pPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0 dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPnt0aHVtYmh1bml0c308L3NwYW4+ IDogdGh1bWJuYWlsIGhlaWdodCB1bml0cyAoZGl0dG8pPC9saT4KCTwvdWw+Cgk8dWwgY2xh c3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntoYXN0aHVtYn08L3Nw YW4+IDogaWYgdGhlIGltYWdlIGhhcyBhbiBhc3NvY2lhdGVkIHRodW1ibmFpbCBvciBub3Qg KHByb2JhYmx5IG5vdCBtdWNoIHVzZSk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+ CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e2dhbGxlcnlpZH08L3NwYW4+IDogdGhl IGdhbGxlcnkgaWQgeW91IG9yIHRoZSBwbHVnaW4gYXNzaWduZWQ8L2xpPgoJPC91bD4KCTx1 bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e29iamVjdH08 L3NwYW4+IDogYSBzcGVjaWFsIGl0ZW0gY29udGFpbmluZyBlaXRoZXIgdGhlIDxjb2RlPnRl eHQ8L2NvZGU+IE9SIHRoZSBpbWFnZSB0YWcgb2YgdGhlIGNvcnJlc3BvbmRpbmcgdGh1bWJu YWlsIGJ1dCBvbmx5IGlmIDxjb2RlPnRodW1ibGltaXQ8L2NvZGU+IGFsbG93cyBpdC4gZS5n LiBpZiA8Y29kZT50aHVtYmxpbWl0PSZxdW90OzEmcXVvdDs8L2NvZGU+IHRoaXMgdmFyaWFi bGUgaXMgb25seSBzZXQgZm9yIHRoZSBmaXJzdCB0aHVtYm5haWwgaW4gdGhlIGxpc3QuIEV2 ZXJ5IG90aGVyIHRpbWUgaXQgaXMgZW1wdHk8L2xpPgoJPC91bD4KCgk8cD5JZiB0aG9zZSBh cmVuJiM4MjE3O3QgZW5vdWdoLCB5b3UgY2FuIDxhIGhyZWY9IiNjb21ib3MiPmNyZWF0ZSB5 b3VyIG93bjwvYT4gYnkgZ3JvdXBpbmcgY29tYmluYXRpb25zIG9mIHRoZSBhYm92ZSwgb3B0 aW9uYWxseSB3aXRoIGFydGljbGUgdmFyaWFibGVzIHN1Y2ggYXMgPGNvZGU+P2V4Y2VycHQ8 L2NvZGU+LCA8Y29kZT4/a2V5d29yZHM8L2NvZGU+LCA8Y29kZT4/YXJ0aWNsZV9pbWFnZTwv Y29kZT4sIGV0Yy48L3A+CgoJPGgzIGlkPSJwYWdpbmdfZm9ybSI+UGFnaW5nIGZvcm08L2gz PgoKCTxwPldoZW4gYWxsIHRoZSB0aHVtYm5haWxzIGhhdmUgYmVlbiBwcm9jZXNzZWQsIHRo ZSA8Y29kZT5wYWdlZm9ybTwvY29kZT4gaXMgcHJvY2Vzc2VkIGFuZCBkaXNwbGF5ZWQuIElu IGEgc2ltaWxhciBtYW5uZXIgdG8gdGhlIHdheSB0aGUgPGEgaHJlZj0iI2dhbGxlcnlfZm9y bSI+Z2FsbGVyeSBmb3JtPC9hPiB3b3JrcywgYSBzZXJpZXMgb2YgPGEgaHJlZj0iI3JlcF9w YWdpbmciPlJlcGxhY2VtZW50IFRhZ3M8L2E+IGdvdmVybiB3aGljaCBnYWxsZXJ5IG5hdmln YXRpb24gaXRlbXMgYXJlIGF2YWlsYWJsZS4gRm9yIGV4YW1wbGUgeW91IGNvdWxkIGNob29z ZSB0byBvbmx5IHNob3cgbmV4dC9wcmV2LiBPciBwZXJoYXBzIDFzdCBwYWdlL2xhc3QgcGFn ZS4gT3IgbnVtYmVyZWQgcGFnZSBsaW5rcy48L3A+CgoJPGg0IGNsYXNzPSJhdHRzICIgaWQ9 InJlcF9wYWdpbmciPlJlcGxhY2VtZW50IHRhZ3M6IHBhZ2luZzwvaDQ+CgoJPHVsIGNsYXNz PSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57bmF2Zmlyc3R9PC9zcGFu PiA6IHRoZSBmaXJzdCBwYWdlIChkZWZhdWx0IGxhYmVsOiA/Rmlyc3Q/KTwvbGk+Cgk8L3Vs PgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57bmF2 cHJldn08L3NwYW4+IDogdGhlIHByZXZpb3VzIHBhZ2UgKGRlZmF1bHQgbGFiZWw6ID8mbGFx dW87Pyk8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJPGxpPjxzcGFuIGNsYXNz PSJhdHQtbmFtZSI+e25hdmVhcmxpZXJ9PC9zcGFuPiA6IGFueSBwYWdlIG51bWJlcnMgYmVm b3JlIHRoZSBjdXJyZW50IHBhZ2U8L2xpPgoJPC91bD4KCTx1bCBjbGFzcz0iYXR0cyI+CgkJ PGxpPjxzcGFuIGNsYXNzPSJhdHQtbmFtZSI+e25hdnRoaXN1cmx9PC9zcGFuPiA6IHRoZSBj dXJyZW50IHBhZ2Ugd2l0aCBhIDxzcGFuIGNsYXNzPSJjYXBzIj5VUkw8L3NwYW4+IGxpbmsg dG8gaXRzZWxmPC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBj bGFzcz0iYXR0LW5hbWUiPntuYXZ0aGlzfTwvc3Bhbj4gOiB0aGUgY3VycmVudCBwYWdlIHdp dGhvdXQgYSA8c3BhbiBjbGFzcz0iY2FwcyI+VVJMPC9zcGFuPiBsaW5rPC9saT4KCTwvdWw+ Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0LW5hbWUiPntuYXZs YXRlcn08L3NwYW4+IDogYW55IHBhZ2UgbnVtYmVycyBhZnRlciB0aGUgY3VycmVudCBwYWdl PC9saT4KCTwvdWw+Cgk8dWwgY2xhc3M9ImF0dHMiPgoJCTxsaT48c3BhbiBjbGFzcz0iYXR0 LW5hbWUiPntuYXZuZXh0fTwvc3Bhbj4gOiB0aGUgcHJldmlvdXMgcGFnZSAoZGVmYXVsdCBs YWJlbDogPyZyYXF1bzs/KTwvbGk+Cgk8L3VsPgoJPHVsIGNsYXNzPSJhdHRzIj4KCQk8bGk+ PHNwYW4gY2xhc3M9ImF0dC1uYW1lIj57bmF2bGFzdH08L3NwYW4+IDogdGhlIGxhc3QgcGFn ZSAoZGVmYXVsdCBsYWJlbDogP0xhc3Q/KTwvbGk+Cgk8L3VsPgoKCTxwPlRoZSBjdXJyZW50 IHBhZ2UgaGFzIGEgZml4ZWQgY2xhc3Mgb2YgP2N1cnJlbnQ/IGFuZCBlYWNoIGl0ZW0gaXMs IGJ5IGRlZmF1bHQsIGEgPGNvZGU+Jmx0O2xpJmd0OzwvY29kZT4gZm9yIGVhc3kgc3R5bGlu Zy4gVG8gYXZvaWQgYSB6aWxsaW9uIG9wdGlvbnMsIGN1c3RvbSBsYWJlbHMgYXJlIGRlZmlu ZWQgZGlyZWN0bHkgaW4gdGhlIGZvcm0gaXRzZWxmIHRodXM6PC9wPgoKCTxwPjxjb2RlPntu YXZmaXJzdDoxc3R9PC9jb2RlPjwvcD4KCgk8cD5UaGlzIGFsc28gYWxsb3dzIHlvdSB0byB1 c2UgPHNwYW4gY2xhc3M9ImNhcHMiPk1MUDwvc3Bhbj4gc25pcHBldHMsIGUuZy46PC9wPgoK CTxwPjxjb2RlPntuYXZmaXJzdDojI2ZpcnN0TGFiZWwjI308L2NvZGU+PC9wPgoKCTxwPllv dSBjYW4gb3ZlcnJpZGUgdGhlIG51bWJlciBvZiBpdGVtcyBkaXNwbGF5ZWQgYnkgbmF2ZWFy bGllciBhbmQgbmF2bGF0ZXIgYnkgc3BlY2lmeWluZyBhIGNvbG9uIGFuZCBhIG51bWJlci4g U28gdG8gb25seSBzaG93IDIgaXRlbXMgdG8gdGhlIGxlZnQgb2YgdGhlIGN1cnJlbnQgcGFn ZSBhbmQgMyBpdGVtcyB0byB0aGUgcmlnaHQsIHVzZSA8Y29kZT57bmF2ZWFybGllcjoyfSB7 bmF2bGF0ZXI6M308L2NvZGU+IGluIHlvdXIgZm9ybS4gQ3VycmVudGx5IDxjb2RlPntuYXZl YXJsaWVyfTwvY29kZT4gYW5kIDxjb2RlPntuYXZsYXRlcn08L2NvZGU+IG9ubHkgZGlzcGxh eSBhcmFiaWMgbnVtZXJhbHMuIEFueSBpZGVhcyBvbiBob3cgdG8gb2ZmZXIgb3RoZXIgY2hh cmFjdGVyIHNldHMgZ3JlYXRseSBhcHByZWNpYXRlZC48L3A+CgoJPGgzIGlkPSJjb21ib3Mi PkNvbWJvczwvaDM+CgoJPHA+SWYgdGhlIGJ1aWx0LWluIDxhIGhyZWY9IiNyZXBfZ2FsbGVy eSI+cmVwbGFjZW1lbnQgdGFnczwvYT4gYXJlbiYjODIxNzt0IGVub3VnaCBmb3IgeW91ciBu ZWVkcyBvciB5b3UgZmluZCB5b3Vyc2VsZiByZXBlYXRpbmcgdGhlIHNhbWUgY29tYmluYXRp b24gYW5kIHdhbnQgdG8gc2F2ZSB5b3Vyc2VsZiBzb21lIHR5cGluZywgeW91IGNhbiBkZWZp bmUgeW91ciBvd24gcmVwbGFjZW1lbnQgdGFncy4gVGhlIHN5bnRheCBpczo8L3A+CgoJPHA+ PGNvZGU+Y29tYm89JnF1b3Q7bmV3dGFnMTpkZWZpbml0aW9uLCBuZXd0YWcyOmRlZmluaXRp b24sIC4uLiZxdW90OzwvY29kZT48L3A+CgoJPHA+JiM4MjE2O2RlZmluaXRpb24mIzgyMTc7 IGNhbiBiZSBhbnkgZml4ZWQgdGV4dCwgYW55IGV4aXN0aW5nIHJlcGxhY2VtZW50IHRhZywg b3IgYW55IGFydGljbGUgdmFyaWFibGUgc28geW91IGNhbiBnZXQgcmVhbGx5IHdpbGQgaGVy ZTo8L3A+CgoJPHA+PGNvZGU+Y29tYm89JnF1b3Q7aW1naW46Zm91bmQgaW4gP3MgW3RhZ2dl ZCB3aXRoID9rZXl3b3Jkcy4gUGhvdG8gYnkge2F1dGhvcn1dJnF1b3Q7PC9jb2RlPjwvcD4K Cgk8cD5zbyBub3cgPGNvZGU+e2ltZ2lufTwvY29kZT4gaXMgYXZhaWxhYmxlIHRvIHlvdXIg Zm9ybSBhbmQgbWlnaHQgYmUgcmVwbGFjZWQgd2l0aCAmIzgyMjA7Zm91bmQgaW4gem9vIFt0 YWdnZWQgd2l0aCB6ZWJyYSwgYWZyaWNhLCBzdHJpcGVzLiBQaG90byBieSBCbG9rZV0mIzgy MjE7LiAkcHJldGV4dCBpcyBhbHNvIGF2YWlsYWJsZSBmb3IgdGhvc2UgZ2Vla3Mgd2hvIGtu b3cgd2hhdCYjODIxNztzIGluIGl0ICh1c2UgPGNvZGU+ZGVidWc9JnF1b3Q7NCZxdW90Ozwv Y29kZT4gdG8gdmlldyBhbGwgYXZhaWxhYmxlIGFydGljbGUgdmFyaWFibGVzKS48L3A+CgoJ PHA+T25lIHRoaW5nIHRvIHdhdGNoIG91dCBmb3IgaXMgdGhhdCB0aGUgc3BhY2UgY2hhcmFj dGVyIGlzbiYjODIxNzt0IG5lY2Vzc2FyaWx5IGEgZGVsaW1pdGVyIGZvciA8Y29kZT4/PC9j b2RlPiB2YXJpYWJsZXMgKGJlY2F1c2UgY3VzdG9tIGZpZWxkcyBjYW4gaGF2ZSBzcGFjZXMg aW4gdGhlbSkuIFNvIDxjb2RlPmNvbWJvPSZxdW90O2RvZXNub3R3b3JrOj9zIGluID9jYXRl Z29yeTEmcXVvdDs8L2NvZGU+IHdpbGwgbG9vayBmb3IgYSB2YXJpYWJsZSBsYWJlbGxlZCAm IzgyMjA7cyBpbiYjODIyMTsgYW5kIG9uZSBjYWxsZWQgJiM4MjIwO2NhdGVnb3J5MSYjODIy MTsuIE9ubHkgb25lIG9mIHRob3NlIGV4aXN0cyEgQ2xldmVyIHVzZSBvZiBwYXJlbnRoZXNl cyBvciBvdGhlciBwdW5jdHVhdGlvbiBjYW4gd29yayByb3VuZCB0aGlzLjwvcD4KCgk8aDMg aWQ9ImNvbGxhdGVfbW9kZSI+Q29sbGF0ZSBtb2RlPC9oMz4KCgk8cD5tb3JlIGhlbHAgc29v biYjODIzMDsuPC9wPgoKCTxoMyBpZD0iY2hhbmdlbG9nIj5DaGFuZ2Vsb2c8L2gzPgoKCTxw PkFsbCBhdmFpbGFibGUgdmVyc2lvbnMgYW5kIGNoYW5nZXMgYXJlIGxpc3RlZCBoZXJlLjwv cD4KCgk8cD48c3Ryb25nPkJldGE8L3N0cm9uZz48L3A+CgoJPHVsPgoJCTxsaT4xNCBGZWIg MDggfCA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93bmxvYWRzL3NtZF9nYWxs ZXJ5X3YwLjEudHh0Ij4wLjE8L2E+IFsgPGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29t L2Rvd25sb2Fkcy9zbWRfZ2FsbGVyeV92MC4xX3ppcC50eHQiPmNvbXByZXNzZWQ8L2E+IF0g fCBJbml0aWFsIHJlbGVhc2UgJiM4MjExOyBIYXBweSBWYWxlbnRpbmVzIERheSA6LSk8L2xp PgoJCTxsaT4xOSBGZWIgMDggfCA8YSBocmVmPSJodHRwOi8vc3RlZmRhd3Nvbi5jb20vZG93 bmxvYWRzL3NtZF9nYWxsZXJ5X3YwLjIudHh0Ij4wLjI8L2E+IFsgPGEgaHJlZj0iaHR0cDov L3N0ZWZkYXdzb24uY29tL2Rvd25sb2Fkcy9zbWRfZ2FsbGVyeV92MC4yX3ppcC50eHQiPmNv bXByZXNzZWQ8L2E+IF0gfCBBZGRlZCA8YSBocmVmPSJodHRwOi8vZm9ydW0udGV4dHBhdHRl cm4uY29tL3ZpZXd0b3BpYy5waHA/cGlkPTE3MjQ1OSNwMTcyNDU5Ij57Z2FsbGVyeWlkfTwv YT4gKHRoYW5rcyBybG9hZGVycm8pIGFuZCBzb21lIHNrZWxldG9uIGRvY3M8L2xpPgoJPC91 bD4KCgk8aDMgaWQ9ImNyZWRpdHMiPkNyZWRpdHM8L2gzPgoKCTxwPlRoaXMgcGx1Z2luIHdv dWxkbiYjODIxNzt0IGhhdmUgZXhpc3RlZCB3aXRob3V0IHRoZSBhd2Vzb21lIG1pbmQgb2Yg Um9iZXJ0IFdldHpsbWF5ci4gSGlzIHdldF9mb3JfZWFjaF9pbWFnZSBwbHVnaW4gaXMgdHJ1 ZSBnZW5pdXM7IHRoaXMgc2ltcGx5IHN0YW5kcyBvbiB0aGUgc2hvdWxkZXJzIG9mIHRoYXQg aWRlYSBhbmQgcm9sbHMgaW4gYSBzb3VwZWQgdXAgdmVyc2lvbiBvZiB0aGUgdGh1bWJuYWls IGdlbmVyYXRpb24gZW5naW5lIGZyb20gc21kX3NsaW1ib3guIFRvIHRoYXQgZW5kLCB0aGUg cGx1Z2luIGlzIGFsc28gaW5kZWJ0ZWQgdG8gYW55b25lIHdobyBoYXMgcG9zdGVkIGZlYXR1 cmVzIG9yIGJ1ZyByZXBvcnRzIHRvIG1lIG9yIHRoZSBzbWRfc2xpbWJveCB0aHJlYWQuIFlv dSYjODIxNztyZSBhbGwgbWFydmVsbG91cy48L3A+CgoJPHA+PC9kaXY+PC9wPgo8IS0tIC0t LSBCRUdJTiBQTFVHSU4gQ1NTIC0tLSAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3Nt ZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCAuYXR0LW5hbWUgeyBmb250 LXdlaWdodDpib2xkOyB9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWlnaHQ6Ym9sZDsgZm9u dDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9zcGFjZTsgYmFja2dy b3VuZC1jb2xvcjogI0ZGRkZDQzt9CiNzbWRfaGVscCBjb2RlLnNlZF9jb2RlX3RhZyB7IGZv bnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQgIzk5OTsgYmFja2dyb3VuZC1j b2xvcjogI2YwZTY4YzsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBw YWRkaW5nOjEwcHg7IH0KI3NtZF9oZWxwIGE6bGluaywgI3NtZF9oZWxwIGE6dmlzaXRlZCB7 IGNvbG9yOiBibHVlOyB0ZXh0LWRlY29yYXRpb246IG5vbmU7IGJvcmRlci1ib3R0b206IDFw eCBzb2xpZCBibHVlOyBwYWRkaW5nLWJvdHRvbToxcHg7fQojc21kX2hlbHAgYTpob3Zlciwg I3NtZF9oZWxwIGE6YWN0aXZlIHsgY29sb3I6IGJsdWU7IHRleHQtZGVjb3JhdGlvbjogbm9u ZTsgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkIGJsdWU7IHBhZGRpbmctYm90dG9tOjFweDt9 CiNzbWRfaGVscCBoMSB7IGNvbG9yOiAjMzY5OyBmb250OiAyMHB4IEdlb3JnaWEsIHNhbnMt c2VyaWY7IG1hcmdpbjogMDsgdGV4dC1hbGlnbjogY2VudGVyOyB9CiNzbWRfaGVscCBoMiB7 IGJvcmRlci1ib3R0b206IDFweCBzb2xpZCBibGFjazsgcGFkZGluZzoxMHB4IDAgMDsgY29s b3I6ICMzNjk7IGZvbnQ6IDE3cHggR2VvcmdpYSwgc2Fucy1zZXJpZjsgfQojc21kX2hlbHAg aDMgeyBjb2xvcjogIzEwODAzMDsgZm9udDogYm9sZCAxMnB4IEFyaWFsLCBzYW5zLXNlcmlm OyBsZXR0ZXItc3BhY2luZzogMXB4OyBtYXJnaW46IDE1cHggMCAwO3RleHQtdHJhbnNmb3Jt OiB1cHBlcmNhc2U7fQo8L3N0eWxlPgo8IS0tIC0tLSBFTkQgUExVR0lOIENTUyAtLS0gLS0+ CiI7czozOiJtZDUiO3M6MzI6IjkzNmNkNzZiYTk5YjY5NWJjMzdjMTI5YzAwOTgxY2U2Ijt9