{"id":997,"date":"2023-10-02T04:53:55","date_gmt":"2023-10-02T02:53:55","guid":{"rendered":"https:\/\/numpx.wpengine.com\/genre-diversite-equite\/"},"modified":"2026-09-10T22:37:23","modified_gmt":"2026-09-10T20:37:23","slug":"genre-diversite-equite","status":"publish","type":"page","link":"https:\/\/numpex.org\/fr\/genre-diversite-equite\/","title":{"rendered":"Genre \/ Diversit\u00e9 \/ \u00c9quit\u00e9"},"content":{"rendered":"<div class=\"wpb-content-wrapper\"><p>[vc_row row_height_percent=\u00a0\u00bb0&Prime; overlay_alpha=\u00a0\u00bb50&Prime; gutter_size=\u00a0\u00bb3&Prime; column_width_percent=\u00a0\u00bb100&Prime; shift_y=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; sticky=\u00a0\u00bbyes\u00a0\u00bb content_parallax=\u00a0\u00bb0&Prime; uncode_shortcode_id=\u00a0\u00bb165842&Prime; css=\u00a0\u00bb.vc_custom_1785924495010{margin-top: 1% !important;}\u00a0\u00bb][vc_column width=\u00a0\u00bb1\/1&Prime;][vc_raw_html]PCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBOdW1QRXgg4oCUIE1lbnUgZGUgc2VjdGlvbnMgc3RpY2t5IOKAlCB2LjYuNAogIE5hb3MgQWdlbmN5IMK3IDIwMjYtMDktMTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgoKPHN0eWxlPgogIDpyb290eyAtLW5weC10b3A6IDYwcHg7IH0gLyogaGF1dGV1ciBkdSBoZWFkZXIgVW5jb2RlIHN0aWNreSAqLwogIC5ucHgtc3VibmF2ewogICAgYmFja2dyb3VuZDogI0UwOTkwMDsgLyogb3JhbmdlIGQnYWNjZW50dWF0aW9uIE51bVBFeCAqLwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjA4KTsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHotaW5kZXg6IDQwOwogIH0KICAubnB4LXN1Ym5hdltoaWRkZW5deyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAubnB4LXN1Ym5hdi5ucHgtc3R1Y2t7IGJvcmRlci1yYWRpdXM6IDAgMCAxMnB4IDEycHg7IH0KICAubnB4LXN1Ym5hdi5ucHgtc3R1Y2t7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IHZhcigtLW5weC10b3ApOwogICAgbGVmdDogMDsgcmlnaHQ6IDA7CiAgfQogIC5ucHgtc3VibmF2X19pbm5lcnsKICAgIC8qIHYuNi40IDogbWV0cmlxdWVzIHBpbG90ZWVzIHBhciB2YXJpYWJsZXMuIExlcyB2YWxldXJzIGRlIHJlcGxpCiAgICAgICBTT05UIGNlbGxlcyBkZSBsYSB2LjYuMiA6IHNhbnMgSlMsIHJlbmR1IGlkZW50aXF1ZS4gKi8KICAgIG1heC13aWR0aDogMTE0MHB4OwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDAgdmFyKC0tbnB4LWdhcCwgMTBweCk7CiAgICBtaW4taGVpZ2h0OiA0NnB4OwogICAgcGFkZGluZy10b3A6IDZweDsKICAgIHBhZGRpbmctYm90dG9tOiA2cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZm9udC1zaXplOiB2YXIoLS1ucHgtZnMsIDExcHgpOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiB2YXIoLS1ucHgtbHMsIC4xMmVtKTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOwogICAgLyogZm9udC1mYW1pbHk6ICdQb3BwaW5zJywgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOyAqLwogIH0KICAubnB4LXN1Ym5hdl9faW5uZXI6Oi13ZWJraXQtc2Nyb2xsYmFyeyBkaXNwbGF5OiBub25lOyB9CiAgLyogU3DDqWNpZmljaXTDqSByZW5mb3Jjw6llICsgIWltcG9ydGFudCA6IG5ldXRyYWxpc2UgbGVzIGNvdWxldXJzIGRlIGxpZW5zIGR1IHRow6htZSBVbmNvZGUgKG9yYW5nZSBhdSBzdXJ2b2wvY2xpYykgKi8KICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYSwKICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYTp2aXNpdGVkewogICAgY29sb3I6IHJnYmEoMjU1LDI1MCwyNDMsLjg4KSAhaW1wb3J0YW50OyAvKiBibGFuYyBjYXNzw6kgKi8KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogOHB4IHZhcigtLW5weC1weCwgMTRweCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIHRyYW5zaXRpb246IGNvbG9yIC4xOHMsIGJhY2tncm91bmQtY29sb3IgLjE4czsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7ICAvKiB2LjYuNCA6IHVuIGxpYmVsbGUgbmUgc2UgY291cGUgamFtYWlzICovCiAgICBmbGV4OiAwIDAgYXV0bzsgICAgICAgLyogdi42LjQgOiBsZXMgcGFzdGlsbGVzIG5lIHNlIGNvbXByaW1lbnQgcGFzICovCiAgfQogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmhvdmVyLAogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmZvY3VzLAogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmFjdGl2ZXsKICAgIGNvbG9yOiAjRkZGRkZGICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLC4xMik7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9CiAgbmF2Lm5weC1zdWJuYXYgLm5weC1zdWJuYXZfX2lubmVyIGEubnB4LWFjdGl2ZSwKICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYS5ucHgtYWN0aXZlOmhvdmVyewogICAgY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICNBODZGMDA7IC8qIG9yYW5nZSBmb25jw6ksIGFwbGF0IHNpbXBsZSAqLwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICB9Cjwvc3R5bGU+Cgo8bmF2IGNsYXNzPSJucHgtc3VibmF2IiBhcmlhLWxhYmVsPSJQYWdlIHNlY3Rpb25zIiBoaWRkZW4+CiAgPGRpdiBjbGFzcz0ibnB4LXN1Ym5hdl9faW5uZXIiPjwvZGl2Pgo8L25hdj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpewogICd1c2Ugc3RyaWN0JzsKCiAgLyogPT09PT09PT09PT09PT09PT09PT0gQ09ORklHIFNJVEUgPT09PT09PT09PT09PT09PT09PT0KICAgICBTZXVsZSB6b25lIMOgIGFkYXB0ZXIgcG91ciByw6l1dGlsaXNlciBsZSBibG9jIGFpbGxldXJzLiAqLwogIHZhciBQUkVGSVggPSAnbmF2LSc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByw6lmaXhlIGRlcyBSb3cgSUQgw6AgZMOpdGVjdGVyICovCiAgdmFyIFNUUklQICA9IFsvLShlbnxmcikkL2ksIC8tZXhhLVthLXowLTldKyQvaV07ICAgLyogc3VmZml4ZXMgZCd1bmljaXTDqSDDoCBpZ25vcmVyICAqLwoKICAvKiBSZXBsaSBwb3VyIGxlcyBwYWdlcyBQQVMgRU5DT1JFIE1JR1LDiUVTIHZlcnMgbGUgcHLDqWZpeGUgbmF2LQogICAgICh0eXBpcXVlbWVudCBsZXMgdHJhZHVjdGlvbnMgV1BNTCBkb250IGxlcyBSb3cgSUQgbidvbnQgcGFzIMOpdMOpCiAgICAgcmVub21tw6lzKS4gVXRpbGlzw6kgVU5JUVVFTUVOVCBzaSBsYSBwYWdlIG5lIGNvbnRpZW50IGF1Y3VuZSByb3cKICAgICDCqyBuYXYtIMK7LiBSZXByZW5kIGxlcyBjbMOpcyBkZSBsYSB2LjUgOiB1bmUgcm93IG5vbW3DqWUKICAgICDCqyBjb25zb3J0aXVtLWV4YS1tYS1lbiDCuyBvdSBzaW1wbGVtZW50IMKrIGNvbnNvcnRpdW0gwrsgZXN0CiAgICAgcmV0cm91dsOpZS4gTGlzdGUgZmVybcOpZSA9IGF1Y3VuIHJpc3F1ZSBkZSBmYXV4IHBvc2l0aWYuICovCiAgdmFyIExFR0FDWV9LRVlTID0gWwogICAgJ292ZXJ2aWV3JywgJ2NvbnNvcnRpdW0nLCAncmVzdWx0cycsICdtZXRyaWNzJywgJ3NvZnR3YXJlJywKICAgICduZXdzJywgJ2V2ZW50cycsICdhZ2VuZGEnLCAndGVhbScsICdjb250YWN0JwogIF07CgogIHZhciBMQUJFTFMgPSB7CiAgICAvKiBMaWJlbGzDqXMgcHLDqWbDqXLDqXMgcGFyIGNsw6kuIFRvdXRlIGNsw6kgYWJzZW50ZSBlc3QgYWZmaWNow6llCiAgICAgICBjYXBpdGFsaXPDqWUgdGVsbGUgcXVlbGxlIChuYXYtam9pbi11cyAtPiDCqyBKb2luIFVzIMK7KS4gKi8KICAgIGVuOiB7CiAgICAgICdjb25zb3J0aXVtJzogJ0NvbnNvcnRpdW0gJiBXb3JrcGFja2FnZXMnLAogICAgICAncmVzdWx0cyc6ICAgICdSZXN1bHRzICYgSW1wYWN0JywKICAgICAgJ21ldHJpY3MnOiAgICAnUHJvamVjdCBNZXRyaWNzJywKICAgICAgJ3RlYW0nOiAgICAgICAnVGhlIFRlYW0nCiAgICB9LAogICAgZnI6IHsKICAgICAgJ292ZXJ2aWV3JzogICAnUHLDqXNlbnRhdGlvbicsCiAgICAgICdjb25zb3J0aXVtJzogJ0NvbnNvcnRpdW0gZXQgbG90cyBkZSB0cmF2YWlsJywKICAgICAgJ3Jlc3VsdHMnOiAgICAnUsOpc3VsdGF0cyBldCBpbXBhY3QnLAogICAgICAnbWV0cmljcyc6ICAgICdDaGlmZnJlcyBjbMOpcycsCiAgICAgICdzb2Z0d2FyZSc6ICAgJ0xvZ2ljaWVscycsCiAgICAgICduZXdzJzogICAgICAgJ0FjdHVhbGl0w6lzJywKICAgICAgJ2V2ZW50cyc6ICAgICAnw4l2w6huZW1lbnRzJywKICAgICAgJ3RlYW0nOiAgICAgICAnTOKAmcOpcXVpcGUnCiAgICB9CiAgfTsKICB2YXIgU1RJQ0tfTU9ERSA9ICd1bmNvZGUnOyAvKiAndW5jb2RlJyA9IGxhIHJvdyBnw6hyZSBsZSBzdGlja3kgwrcgJ2pzJyA9IGxlIHNjcmlwdCBjb2xsZSBsdWktbcOqbWUgKi8KICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKICB2YXIgREVCVUcgPSAvWz8mXW5weGRlYnVnPTEvLnRlc3Qod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgZnVuY3Rpb24gbG9nKCl7CiAgICBpZighREVCVUcgfHwgIXdpbmRvdy5jb25zb2xlIHx8ICFjb25zb2xlLmxvZykgcmV0dXJuOwogICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgWydbbnB4LXN1Ym5hdl0nXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CiAgfQoKICAvKiAtLS0tIExhbmd1ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgPGh0bWwgbGFuZz4gcG9zw6kgcGFyIFdQTUwuIFJlcGxpcyBzdWNjZXNzaWZzIHNpIGwnYXR0cmlidXQgbWFucXVlIDoKICAgICB1biBhbmPDqnRyZSBwb3J0ZXVyIGRlIGxhbmcsIHB1aXMgbGVzIGNsYXNzZXMgZHUgYm9keS4gKi8KICBmdW5jdGlvbiBkZXRlY3RMYW5nKGVsKXsKICAgIHZhciB0YWcgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYW5nJykgfHwgJyc7CiAgICBpZighdGFnICYmIGVsICYmIGVsLmNsb3Nlc3QpewogICAgICB2YXIgaG9zdCA9IGVsLmNsb3Nlc3QoJ1tsYW5nXScpOwogICAgICBpZihob3N0KXsgdGFnID0gaG9zdC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKSB8fCAnJzsgfQogICAgfQogICAgaWYoIXRhZyl7CiAgICAgIHZhciBjbHMgPSAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSkgfHwgJyc7CiAgICAgIGlmKC8oPzpsYW5nfGxhbmd1YWdlKS1mclxifGZyW18tXUZSL2kudGVzdChjbHMpKXsgdGFnID0gJ2ZyJzsgfQogICAgfQogICAgcmV0dXJuIC9eZnIvaS50ZXN0KHRhZykgPyAnZnInIDogJ2VuJzsKICB9CgogIGZ1bmN0aW9uIGtleU9mKGlkKXsKICAgIHZhciBrID0gaWQuc2xpY2UoUFJFRklYLmxlbmd0aCkudG9Mb3dlckNhc2UoKTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBTVFJJUC5sZW5ndGg7IGkrKyl7IGsgPSBrLnJlcGxhY2UoU1RSSVBbaV0sICcnKTsgfQogICAgcmV0dXJuIGs7CiAgfQogIGZ1bmN0aW9uIHRpdGxlQ2FzZShrZXkpewogICAgcmV0dXJuIGtleS5zcGxpdCgnLScpLm1hcChmdW5jdGlvbih3KXsKICAgICAgcmV0dXJuIHcgPyB3LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdy5zbGljZSgxKSA6IHc7CiAgICB9KS5qb2luKCcgJyk7CiAgfQoKICAvKiBEb3VibGUgc8OpY3VyaXTDqSA6IMOpY2FydGUgbGVzIG1lbnVzIGfDqW7DqXLDqXMgcGFyIFdvcmRQcmVzcyBldCB0b3V0IGNlCiAgICAgcXVpIHZpdCBkYW5zIGxhIG5hdmlnYXRpb24gb3UgbGUgaGVhZGVyIOKAlCBpbmNoYW5nw6kgZGVwdWlzIGxhIHYuNi4xLiAqLwogIGZ1bmN0aW9uIGlzU2VjdGlvbkNhbmRpZGF0ZShlbCl7CiAgICB2YXIgdGFnID0gZWwudGFnTmFtZTsKICAgIGlmKHRhZyA9PT0gJ1VMJyB8fCB0YWcgPT09ICdMSScgfHwgdGFnID09PSAnQScgfHwgdGFnID09PSAnTkFWJyl7IHJldHVybiBmYWxzZTsgfQogICAgaWYoZWwuY2xvc2VzdCAmJiBlbC5jbG9zZXN0KCduYXYsIGhlYWRlciwgLm5weC1zdWJuYXYnKSl7IHJldHVybiBmYWxzZTsgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBpbkRvY3VtZW50T3JkZXIoYSwgYil7CiAgICB2YXIgcG9zID0gYS5zZWN0aW9uLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIuc2VjdGlvbik7CiAgICByZXR1cm4gKHBvcyAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSA\/IC0xIDogMTsKICB9CgogIC8qIC0tLS0gRMOpY291dmVydGUgZGVzIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgMSkgTW9kZSBub21pbmFsIDogdG91dGVzIGxlcyByb3dzIGRvbnQgbCdpZCBjb21tZW5jZSBwYXIgwqsgbmF2LSDCuy4KICAgICAyKSBSZXBsaSA6IHNpIGV0IHNldWxlbWVudCBzaSBsZSBtb2RlIDEgbmUgZG9ubmUgUklFTiwgb24gY2hlcmNoZQogICAgICAgIGxlcyBjbMOpcyBow6lyaXTDqWVzIGRlIGxhIHYuNSwgYXZlYyBvdSBzYW5zIHN1ZmZpeGUuCiAgICAgUmVudm9pZSB7IGVudHJpZXM6IFsuLi5dLCBtb2RlOiAncHJlZml4JyB8ICdsZWdhY3knIHwgJ25vbmUnIH0uICovCiAgZnVuY3Rpb24gZGlzY292ZXIoZGljdCl7CiAgICB2YXIgc2VlbiA9IE9iamVjdC5jcmVhdGUobnVsbCksIGVudHJpZXMgPSBbXTsKCiAgICBmdW5jdGlvbiBwdXNoKGVsLCBrZXkpewogICAgICBpZighZWwgfHwgIWtleSB8fCBzZWVuW2tleV0peyByZXR1cm47IH0KICAgICAgc2VlbltrZXldID0gdHJ1ZTsKICAgICAgZW50cmllcy5wdXNoKHsgc2VjdGlvbjogZWwsIGtleToga2V5LCBsYWJlbDogZGljdFtrZXldIHx8IHRpdGxlQ2FzZShrZXkpIH0pOwogICAgfQoKICAgIHZhciBmb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49IicgKyBQUkVGSVggKyAnIl0nKTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBmb3VuZC5sZW5ndGg7IGkrKyl7CiAgICAgIGlmKCFpc1NlY3Rpb25DYW5kaWRhdGUoZm91bmRbaV0pKXsgY29udGludWU7IH0KICAgICAgcHVzaChmb3VuZFtpXSwga2V5T2YoZm91bmRbaV0uaWQpKTsKICAgIH0KICAgIGlmKGVudHJpZXMubGVuZ3RoKXsKICAgICAgd2FybklmUGFydGlhbGx5TWlncmF0ZWQoc2Vlbik7CiAgICAgIHJldHVybiB7IGVudHJpZXM6IGVudHJpZXMsIG1vZGU6ICdwcmVmaXgnIH07CiAgICB9CgogICAgZm9yKHZhciBqID0gMDsgaiA8IExFR0FDWV9LRVlTLmxlbmd0aDsgaisrKXsKICAgICAgdmFyIGsgID0gTEVHQUNZX0tFWVNbal07CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGspIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZF49IicgKyBrICsgJy0iXScpOwogICAgICBpZihlbCAmJiBpc1NlY3Rpb25DYW5kaWRhdGUoZWwpKXsgcHVzaChlbCwgayk7IH0KICAgIH0KICAgIGlmKGVudHJpZXMubGVuZ3RoKXsKICAgICAgZW50cmllcy5zb3J0KGluRG9jdW1lbnRPcmRlcik7IC8qIGxhIGxpc3RlIGRlcyBjbMOpcyBuZSBzdWl0IHBhcyBsJ29yZHJlIGRlIGxhIHBhZ2UgKi8KICAgICAgcmV0dXJuIHsgZW50cmllczogZW50cmllcywgbW9kZTogJ2xlZ2FjeScgfTsKICAgIH0KCiAgICByZXR1cm4geyBlbnRyaWVzOiBlbnRyaWVzLCBtb2RlOiAnbm9uZScgfTsKICB9CgogIC8qIC0tLS0gTWlncmF0aW9uIHBhcnRpZWxsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIENhcyBwacOoZ2UgOiBzdXIgdW5lIG3Dqm1lIHBhZ2UgY2VydGFpbmVzIHJvd3Mgb250IMOpdMOpIHJlbm9tbcOpZXMgZW4KICAgICBuYXYt4oCmIGV0IGQnYXV0cmVzIG5vbi4gTGUgbW9kZSBub21pbmFsIGwnZW1wb3J0ZSBldCBsZXMgcm93cyBub24KICAgICByZW5vbW3DqWVzIGRpc3BhcmFpc3NlbnQgU0lMRU5DSUVVU0VNRU5UIGR1IG1lbnUuIE9uIGxlIHNpZ25hbGUuICovCiAgZnVuY3Rpb24gd2FybklmUGFydGlhbGx5TWlncmF0ZWQoc2Vlbil7CiAgICBpZighd2luZG93LmNvbnNvbGUgfHwgIWNvbnNvbGUud2Fybil7IHJldHVybjsgfQogICAgdmFyIHN0cmFnZ2xlcnMgPSBbXTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBMRUdBQ1lfS0VZUy5sZW5ndGg7IGkrKyl7CiAgICAgIHZhciBrID0gTEVHQUNZX0tFWVNbaV07CiAgICAgIGlmKHNlZW5ba10peyBjb250aW51ZTsgfSAvKiBkw6lqw6AgcHLDqXNlbnQgdmlhIHVuZSByb3cgbmF2LSAqLwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWRePSInICsgayArICctIl0nKTsKICAgICAgaWYoZWwgJiYgaXNTZWN0aW9uQ2FuZGlkYXRlKGVsKSl7IHN0cmFnZ2xlcnMucHVzaChrICsgJyAoIycgKyBlbC5pZCArICcpJyk7IH0KICAgIH0KICAgIGlmKCFzdHJhZ2dsZXJzLmxlbmd0aCl7IHJldHVybjsgfQogICAgY29uc29sZS53YXJuKAogICAgICAnW25weC1zdWJuYXZdIE1pZ3JhdGlvbiBpbmNvbXBsZXRlIHN1ciBjZXR0ZSBwYWdlIDogJyArIHN0cmFnZ2xlcnMubGVuZ3RoICsKICAgICAgJyByb3cocykgcG9ydGVudCBlbmNvcmUgdW4gYW5jaWVuIFJvdyBJRCBldCBzb250IEFCU0VOVEVTIGR1IG1lbnUgLT4gJyArCiAgICAgIHN0cmFnZ2xlcnMuam9pbignLCAnKSArICdcbicgKwogICAgICAnTGVzIHJlbm9tbWVyIGF2ZWMgbGUgcHJlZml4ZSAiJyArIFBSRUZJWCArICciIChleC4gJyArIFBSRUZJWCArIExFR0FDWV9LRVlTWzBdICsgJykuJwogICAgKTsKICB9CgogIC8qIC0tLS0gTWVzc2FnZSBkZSBkaWFnbm9zdGljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIEludmlzaWJsZSBwb3VyIGxlcyB2aXNpdGV1cnMsIGTDqWNpc2lmIHBvdXIgbGEgcGVyc29ubmUgcXVpIHJlcHJlbmQKICAgICBsZSBkb3NzaWVyIDogb24gZGl0IGNlIHF1aSBhIMOpdMOpIGNoZXJjaMOpIGV0IGNlIHF1aSBhIMOpdMOpIHRyb3V2w6kuICovCiAgZnVuY3Rpb24gd2Fybk5vdGhpbmdGb3VuZCgpewogICAgaWYoIXdpbmRvdy5jb25zb2xlIHx8ICFjb25zb2xlLndhcm4peyByZXR1cm47IH0KICAgIHZhciB3aXRoSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRdJyk7CiAgICBjb25zb2xlLndhcm4oCiAgICAgICdbbnB4LXN1Ym5hdl0gQXVjdW5lIHNlY3Rpb24gdHJvdXbDqWUgOiBsYSBiYXJyZSByZXN0ZSBtYXNxdcOpZS5cbicgKwogICAgICAnLSBSZWNoZXJjaMOpIGVuIHByaW9yaXTDqSA6IGRlcyBSb3cgSUQgY29tbWVuw6dhbnQgcGFyICInICsgUFJFRklYICsgJyIgKGV4LiBuYXYtb3ZlcnZpZXcpLlxuJyArCiAgICAgICctIFB1aXMsIGVuIHJlcGxpLCBsZXMgY2xlcyBoZXJpdGVlcyA6ICcgKyBMRUdBQ1lfS0VZUy5qb2luKCcsICcpICsgJy5cbicgKwogICAgICAnLSBQYWdlIGxhbmc9IicgKyAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnbGFuZycpIHx8ICcoYWJzZW50KScpICsgJyIsICcgKwogICAgICB3aXRoSWQubGVuZ3RoICsgJyBlbGVtZW50KHMpIHBvcnRlbnQgdW4gaWQuXG4nICsKICAgICAgJy0gQ2F1c2UgbGEgcGx1cyBmcmVxdWVudGUgOiBsZXMgUm93IElEIGRlIENFVFRFIHBhZ2UgbmUgc29udCBwYXMgbm9tbWVzLiAnICsKICAgICAgJ1NvdXMgV1BNTCB1bmUgdHJhZHVjdGlvbiBlc3QgdW4gcG9zdCBkaXN0aW5jdCDigJQgcmVub21tZXIgbGVzIFJvdyBJRCBkZSBsYSBwYWdlICcgKwogICAgICAnc291cmNlIG5lIHJlbm9tbWUgcGFzIGNldXggZGUgbGEgdHJhZHVjdGlvbiA6IGlsIGZhdXQgbGVzIHNhaXNpciBzdXIgY2hhcXVlIGxhbmd1ZS5cbicgKwogICAgICAnLSBQb3VyIGxhIGxpc3RlIGRlcyBpZHMgcHJlc2VudHMsIHJlY2hhcmdlciBsYSBwYWdlIGF2ZWMgP25weGRlYnVnPTEnCiAgICApOwogICAgaWYoREVCVUcpewogICAgICB2YXIgaWRzID0gW107CiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB3aXRoSWQubGVuZ3RoOyBpKyspeyBpZHMucHVzaCh3aXRoSWRbaV0uaWQpOyB9CiAgICAgIGNvbnNvbGUud2FybignW25weC1zdWJuYXZdIGlkcyBwcmVzZW50cyBzdXIgbGEgcGFnZSA6JywgaWRzKTsKICAgIH0KICB9CgogIC8qIC0tLS0gSW5pdGlhbGlzYXRpb24gZCd1bmUgaW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICBSZW52b2llIHRydWUgc2kgbGEgYmFycmUgYSDDqXTDqSBjb25zdHJ1aXRlLCBmYWxzZSBzJ2lsIG4neSBhdmFpdAogICAgIGF1Y3VuZSBzZWN0aW9uIChsJ2luc3RhbmNlIHJlc3RlIGFsb3JzIMOpbGlnaWJsZSDDoCB1bmUgbm91dmVsbGUKICAgICB0ZW50YXRpdmUgOiBkYXRhLW5weC1yZWFkeSBuJ2VzdCBwb3PDqSBxdSdlbiBjYXMgZGUgc3VjY8OocykuICovCiAgZnVuY3Rpb24gaW5pdChuYXYpewogICAgdmFyIGlubmVyID0gbmF2LnF1ZXJ5U2VsZWN0b3IoJy5ucHgtc3VibmF2X19pbm5lcicpOwogICAgaWYoIWlubmVyKXsKICAgICAgbmF2LnNldEF0dHJpYnV0ZSgnZGF0YS1ucHgtcmVhZHknLCAnMScpOyAvKiBiYWxpc2FnZSBpbmF0dGVuZHUgOiBuZSBwYXMgYm91Y2xlciBkZXNzdXMgKi8KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgdmFyIGxhbmcgID0gZGV0ZWN0TGFuZyhuYXYpOwogICAgdmFyIGRpY3QgID0gTEFCRUxTW2xhbmddIHx8IHt9OwogICAgdmFyIGZvdW5kID0gZGlzY292ZXIoZGljdCk7CiAgICB2YXIgZW50cmllcyA9IGZvdW5kLmVudHJpZXM7CgogICAgaWYoIWVudHJpZXMubGVuZ3RoKXsgcmV0dXJuIGZhbHNlOyB9CgogICAgbmF2LnNldEF0dHJpYnV0ZSgnZGF0YS1ucHgtcmVhZHknLCAnMScpOwogICAgbG9nKCdtb2RlID0nLCBmb3VuZC5tb2RlLCAnfCBsYW5nID0nLCBsYW5nLCAnfCBlbnRyZWVzID0nLCBlbnRyaWVzLm1hcChmdW5jdGlvbihlKXsKICAgICAgcmV0dXJuIGUua2V5ICsgJyAtPiAnICsgZS5sYWJlbCArICcgKCMnICsgZS5zZWN0aW9uLmlkICsgJyknOwogICAgfSkpOwoKICAgIGlubmVyLmlubmVySFRNTCA9ICcnOwogICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgYS5ocmVmID0gJyMnICsgZS5zZWN0aW9uLmlkOwogICAgICBhLnRleHRDb250ZW50ID0gZS5sYWJlbDsKICAgICAgaW5uZXIuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIGUubGluayA9IGE7CiAgICB9KTsKICAgIG5hdi5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwoKICAgIC8qIC0tLS0gdi42LjQgOiBsYSBiYXJyZSB0aWVudCBzdXIgdW5lIGxpZ25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgZmxleC13cmFwOm5vd3JhcCBzdXBwcmltZSBsYSAyZSBsaWduZS4gT24gbWVzdXJlIGV0IG9uIHJldGllbnQgbGUKICAgICAgIFBSRU1JRVIgcGFsaWVyIHF1aSByZW50cmUuIExlIHBhbGllciAwIGVzdCBsZSByZW5kdSB2LjYuMiA6IHVuZQogICAgICAgYmFycmUgcXVpIHJlbnRyYWl0IGRlamEgbmUgYm91Z2UgcGFzIGQndW4gcGl4ZWwuIFNpIG1lbWUgbGUKICAgICAgIHBsYW5jaGVyIGRlYm9yZGUgKHRlbGVwaG9uZSksIGxhIGJhcnJlIGRlZmlsZSBob3Jpem9udGFsZW1lbnQuCiAgICAgICBUb3V0IGVzdCBlbnZlbG9wcGUgOiBlbiBjYXMgZCdlcnJldXIgb24gcmV2aWVudCBhdSBwYWxpZXIgMC4gKi8KICAgIHZhciBTVEVQUyA9IFsKICAgICAgeyBmczogJzExcHgnLCAgIGxzOiAnLjEyZW0nLCBweDogJzE0cHgnLCBnYXA6ICcxMHB4JyB9LCAvKiByZW5kdSB2LjYuMiAqLwogICAgICB7IGZzOiAnMTFweCcsICAgbHM6ICcuMDllbScsIHB4OiAnMTNweCcsIGdhcDogJzlweCcgIH0sCiAgICAgIHsgZnM6ICcxMC41cHgnLCBsczogJy4wN2VtJywgcHg6ICcxMnB4JywgZ2FwOiAnOHB4JyAgfSwKICAgICAgeyBmczogJzEwcHgnLCAgIGxzOiAnLjA2ZW0nLCBweDogJzExcHgnLCBnYXA6ICc3cHgnICB9LAogICAgICB7IGZzOiAnOS41cHgnLCAgbHM6ICcuMDVlbScsIHB4OiAnMTBweCcsIGdhcDogJzZweCcgIH0sCiAgICAgIHsgZnM6ICc5cHgnLCAgICBsczogJy4wNGVtJywgcHg6ICc5cHgnLCAgZ2FwOiAnNXB4JyAgfSAgLyogcGxhbmNoZXIgKi8KICAgIF07CiAgICBmdW5jdGlvbiBhcHBseVN0ZXAocyl7CiAgICAgIHZhciBzdCA9IGlubmVyLnN0eWxlOwogICAgICBzdC5zZXRQcm9wZXJ0eSgnLS1ucHgtZnMnLCAgcy5mcyk7CiAgICAgIHN0LnNldFByb3BlcnR5KCctLW5weC1scycsICBzLmxzKTsKICAgICAgc3Quc2V0UHJvcGVydHkoJy0tbnB4LXB4JywgIHMucHgpOwogICAgICBzdC5zZXRQcm9wZXJ0eSgnLS1ucHgtZ2FwJywgcy5nYXApOwogICAgfQogICAgZnVuY3Rpb24gb3ZlcmZsb3dpbmcoKXsgcmV0dXJuIGlubmVyLnNjcm9sbFdpZHRoID4gaW5uZXIuY2xpZW50V2lkdGggKyAxOyB9CgogICAgdmFyIGZpdHRpbmcgPSBmYWxzZSwgbGFzdFcgPSAtMTsKICAgIGZ1bmN0aW9uIGZpdCgpewogICAgICBpZihmaXR0aW5nKXsgcmV0dXJuOyB9CiAgICAgIGZpdHRpbmcgPSB0cnVlOwogICAgICB0cnl7CiAgICAgICAgLyogQmFycmUgbm9uIG1lc3VyYWJsZSAobWFzcXVlZSwgb25nbGV0IHJlcGxpZSkgOiBuZSByaWVuIGNvbmNsdXJlLiAqLwogICAgICAgIGlmKGlubmVyLmNsaWVudFdpZHRoID4gNDApewogICAgICAgICAgdmFyIGksIGNob3NlbiA9IFNURVBTLmxlbmd0aCAtIDE7CiAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBTVEVQUy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgIGFwcGx5U3RlcChTVEVQU1tpXSk7CiAgICAgICAgICAgIGlmKCFvdmVyZmxvd2luZygpKXsgY2hvc2VuID0gaTsgYnJlYWs7IH0KICAgICAgICAgIH0KICAgICAgICAgIGlmKGNob3NlbiAhPT0gaSl7IGFwcGx5U3RlcChTVEVQU1tjaG9zZW5dKTsgfQogICAgICAgICAgbGFzdFcgPSBuYXYuY2xpZW50V2lkdGg7CiAgICAgICAgfQogICAgICB9Y2F0Y2goZXJyKXsKICAgICAgICBhcHBseVN0ZXAoU1RFUFNbMF0pOyAgLyogamFtYWlzIGRlIGJhcnJlIGNhc3NlZSAqLwogICAgICB9CiAgICAgIGZpdHRpbmcgPSBmYWxzZTsKICAgIH0KICAgIGZpdCgpOwoKICAgIC8qIExhIHBvbGljZSBkdSB0aGVtZSBhcnJpdmUgZW4gYXN5bmNocm9uZSA6IHJlbWVzdXJlciBhIHNvbiBhcnJpdmVlLiAqLwogICAgaWYoZG9jdW1lbnQuZm9udHMgJiYgZG9jdW1lbnQuZm9udHMucmVhZHkgJiYgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbil7CiAgICAgIHRyeXsgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihmaXQsIGZpdCk7IH1jYXRjaChlcnIpe30KICAgIH0KICAgIHNldFRpbWVvdXQoZml0LCA2MDApOwogICAgc2V0VGltZW91dChmaXQsIDIwMDApOwoKICAgIC8qIExlIHBhc3NhZ2UgZW4gc3RpY2t5IGNoYW5nZSBsYSBsYXJnZXVyIHNhbnMgZXZlbmVtZW50IHJlc2l6ZS4gKi8KICAgIGlmKHdpbmRvdy5SZXNpemVPYnNlcnZlcil7CiAgICAgIHRyeXsKICAgICAgICBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24oKXsKICAgICAgICAgIGlmKG5hdi5jbGllbnRXaWR0aCAhPT0gbGFzdFcpeyBmaXQoKTsgfQogICAgICAgIH0pLm9ic2VydmUobmF2KTsKICAgICAgfWNhdGNoKGVycil7fQogICAgfQoKICAgIC8qIEVuIG1vZGUgZGVmaWxlbWVudCwgZ2FyZGVyIGxhIHBhc3RpbGxlIGFjdGl2ZSB2aXNpYmxlLiAqLwogICAgZnVuY3Rpb24gcmV2ZWFsKGxpbmspewogICAgICBpZighbGluayB8fCAhb3ZlcmZsb3dpbmcoKSl7IHJldHVybjsgfQogICAgICB2YXIgbCA9IGxpbmsub2Zmc2V0TGVmdCwgciA9IGwgKyBsaW5rLm9mZnNldFdpZHRoOwogICAgICB2YXIgdnMgPSBpbm5lci5zY3JvbGxMZWZ0LCB2ZSA9IHZzICsgaW5uZXIuY2xpZW50V2lkdGg7CiAgICAgIGlmKGwgPCB2cyl7IGlubmVyLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBsIC0gMTIpOyB9CiAgICAgIGVsc2UgaWYociA+IHZlKXsgaW5uZXIuc2Nyb2xsTGVmdCA9IHIgLSBpbm5lci5jbGllbnRXaWR0aCArIDEyOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9wT2Zmc2V0KCl7CiAgICAgIHZhciB2ID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0tbnB4LXRvcCcpOwogICAgICByZXR1cm4gcGFyc2VJbnQodiwgMTApIHx8IDA7CiAgICB9CiAgICAvKiBEw6lmaWxlbWVudCBhdmVjIGNvbXBlbnNhdGlvbiBkZXMgZGV1eCBtZW51cy4gKi8KICAgIGZ1bmN0aW9uIHRvdGFsT2Zmc2V0KCl7IHJldHVybiB0b3BPZmZzZXQoKSArIG5hdi5vZmZzZXRIZWlnaHQgKyA4OyB9CgogICAgLyogLS0tLSBDb2xsYWdlIDogZml4ZWQgKyBwbGFjZWhvbGRlciBhbnRpLXNhdXQgKG1vZGUgJ2pzJykgLS0tLSAqLwogICAgdmFyIHBoID0gbnVsbDsKICAgIGlmKFNUSUNLX01PREUgPT09ICdqcycpewogICAgICBwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwaC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBuYXYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocGgsIG5hdik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGljaygpewogICAgICBpZighcGgpeyByZXR1cm47IH0KICAgICAgdmFyIGFuY2hvciA9IChwaC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpID8gbmF2IDogcGg7CiAgICAgIHZhciBzaG91bGQgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIDw9IHRvcE9mZnNldCgpOwogICAgICBpZihzaG91bGQgJiYgIW5hdi5jbGFzc0xpc3QuY29udGFpbnMoJ25weC1zdHVjaycpKXsKICAgICAgICBwaC5zdHlsZS5oZWlnaHQgID0gbmF2Lm9mZnNldEhlaWdodCArICdweCc7CiAgICAgICAgcGguc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgbmF2LmNsYXNzTGlzdC5hZGQoJ25weC1zdHVjaycpOwogICAgICB9ZWxzZSBpZighc2hvdWxkICYmIG5hdi5jbGFzc0xpc3QuY29udGFpbnMoJ25weC1zdHVjaycpKXsKICAgICAgICBuYXYuY2xhc3NMaXN0LnJlbW92ZSgnbnB4LXN0dWNrJyk7CiAgICAgICAgcGguc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgfQoKICAgIC8qIC0tLS0gU2VjdGlvbiBhY3RpdmUgLS0tLSAqLwogICAgdmFyIGxhc3RDdXJyZW50ID0gbnVsbDsKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodCgpewogICAgICB2YXIgbGltaXQgPSB0b3RhbE9mZnNldCgpICsgNDsKICAgICAgdmFyIGN1cnJlbnQgPSBudWxsOwogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgaWYoZS5zZWN0aW9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8PSBsaW1pdCl7IGN1cnJlbnQgPSBlOyB9CiAgICAgIH0pOwogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgZS5saW5rLmNsYXNzTGlzdC50b2dnbGUoJ25weC1hY3RpdmUnLCBlID09PSBjdXJyZW50KTsKICAgICAgfSk7CiAgICAgIGlmKGN1cnJlbnQgIT09IGxhc3RDdXJyZW50KXsKICAgICAgICBsYXN0Q3VycmVudCA9IGN1cnJlbnQ7CiAgICAgICAgaWYoY3VycmVudCl7IHJldmVhbChjdXJyZW50LmxpbmspOyB9CiAgICAgIH0KICAgIH0KCiAgICAvKiAtLS0tIENsaWMgc3VyIHVuZSBlbnRyw6llIC0tLS0gKi8KICAgIHZhciBzbW9vdGggPSAhd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlczsKICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgZS5saW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXYpewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdmFyIHkgPSBlLnNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0IC0gdG90YWxPZmZzZXQoKTsKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHksIGJlaGF2aW9yOiBzbW9vdGggPyAnc21vb3RoJyA6ICdhdXRvJyB9KTsKICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgJyMnICsgZS5zZWN0aW9uLmlkKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBmdW5jdGlvbiBvblNjcm9sbCgpeyBzdGljaygpOyBoaWdobGlnaHQoKTsgfQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24oKXsgZml0KCk7IG9uU2Nyb2xsKCk7IH0pOwogICAgb25TY3JvbGwoKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLyogLS0tLSBBbW9yw6dhZ2UgOiB0b3V0ZXMgbGVzIGluc3RhbmNlcywgYXZlYyBxdWVscXVlcyByZWxhbmNlcyAtLS0tLS0KICAgICBMZXMgcm93cyBVbmNvZGUgcGV1dmVudCDDqnRyZSBpbmplY3TDqWVzIGFwcsOocyBsZSBET01Db250ZW50TG9hZGVkCiAgICAgKGxhenkgLyBBSkFYKSA6IG9uIHJldGVudGUgcGVuZGFudCB+Miw1IHMgYXZhbnQgZGUgY29uY2x1cmUuICovCiAgZnVuY3Rpb24gYm9vdCgpewogICAgdmFyIG5hdnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubnB4LXN1Ym5hdjpub3QoW2RhdGEtbnB4LXJlYWR5XSknKTsKICAgIHZhciBwZW5kaW5nID0gMDsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuYXZzLmxlbmd0aDsgaSsrKXsKICAgICAgaWYoIWluaXQobmF2c1tpXSkpeyBwZW5kaW5nKys7IH0KICAgIH0KICAgIHJldHVybiBwZW5kaW5nOwogIH0KCiAgZnVuY3Rpb24gcnVuKCl7CiAgICBpZihib290KCkgPT09IDApeyByZXR1cm47IH0KICAgIHZhciB0cmllcyA9IDA7CiAgICB2YXIgdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICB0cmllcysrOwogICAgICB2YXIgbGFzdCA9IHRyaWVzID49IDY7IC8qIDYgeCA0MDAgbXMgKi8KICAgICAgaWYoYm9vdCgpID09PSAwIHx8IGxhc3QpewogICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICAgIGlmKGxhc3QgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5weC1zdWJuYXY6bm90KFtkYXRhLW5weC1yZWFkeV0pJykpewogICAgICAgICAgd2Fybk5vdGhpbmdGb3VuZCgpOwogICAgICAgIH0KICAgICAgfQogICAgfSwgNDAwKTsKICB9CgogIGlmKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyl7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgcnVuKTsKICB9ZWxzZXsKICAgIHJ1bigpOwogIH0KfSkoKTsKPC9zY3JpcHQ+[\/vc_raw_html][\/vc_column][\/vc_row][vc_row unlock_row_content=\u00a0\u00bbyes\u00a0\u00bb row_height_percent=\u00a0\u00bb0&Prime; override_padding=\u00a0\u00bbyes\u00a0\u00bb h_padding=\u00a0\u00bb5&Prime; top_padding=\u00a0\u00bb5&Prime; bottom_padding=\u00a0\u00bb5&Prime; back_color=\u00a0\u00bbcolor-xsdn\u00a0\u00bb overlay_alpha=\u00a0\u00bb50&Prime; gutter_size=\u00a0\u00bb4&Prime; column_width_percent=\u00a0\u00bb100&Prime; shift_y=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; top_divider=\u00a0\u00bbgradient\u00a0\u00bb bottom_divider=\u00a0\u00bbgradient\u00a0\u00bb inverted_device_order=\u00a0\u00bbyes\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb304953&Prime; back_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb el_id=\u00a0\u00bbnotre-EDI-engagement-fr\u00a0\u00bb][vc_column column_width_percent=\u00a0\u00bb100&Prime; gutter_size=\u00a0\u00bb3&Prime; style=\u00a0\u00bbdark\u00a0\u00bb overlay_alpha=\u00a0\u00bb50&Prime; shift_x=\u00a0\u00bb0&Prime; shift_y=\u00a0\u00bb0&Prime; shift_y_down=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; medium_width=\u00a0\u00bb0&Prime; mobile_width=\u00a0\u00bb0&Prime; css_animation=\u00a0\u00bbalpha-anim\u00a0\u00bb animation_speed=\u00a0\u00bb1000&Prime; sticky=\u00a0\u00bbyes\u00a0\u00bb width=\u00a0\u00bb1\/4&Prime; uncode_shortcode_id=\u00a0\u00bb202619&Prime;][vc_single_image media=\u00a0\u00bb2086&Prime; media_width_percent=\u00a0\u00bb65&Prime; alignment=\u00a0\u00bbcenter\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb118532&Prime;][vc_row_inner row_inner_height_percent=\u00a0\u00bb0&Prime; overlay_alpha=\u00a0\u00bb50&Prime; gutter_size=\u00a0\u00bb4&Prime; shift_y=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; limit_content=\u00a0\u00bb\u00a0\u00bb][vc_column_inner column_width_percent=\u00a0\u00bb100&Prime; gutter_size=\u00a0\u00bb3&Prime; style=\u00a0\u00bbdark\u00a0\u00bb back_color=\u00a0\u00bbcolor-583231&Prime; overlay_alpha=\u00a0\u00bb50&Prime; radius=\u00a0\u00bbstd\u00a0\u00bb shadow=\u00a0\u00bbstd\u00a0\u00bb shift_x=\u00a0\u00bb0&Prime; shift_y=\u00a0\u00bb0&Prime; shift_y_down=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; medium_width=\u00a0\u00bb4&Prime; mobile_width=\u00a0\u00bb0&Prime; width=\u00a0\u00bb1\/1&Prime; uncode_shortcode_id=\u00a0\u00bb149962&Prime; back_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb][vc_custom_heading text_color=\u00a0\u00bbcolor-xsdn\u00a0\u00bb text_size=\u00a0\u00bbh3&Prime; uncode_shortcode_id=\u00a0\u00bb479888&Prime; text_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb subheading=\u00a0\u00bbGenre \/ Diversit\u00e9 \/ \u00c9quit\u00e9\u00a0\u00bb]Actions transversales[\/vc_custom_heading][\/vc_column_inner][\/vc_row_inner][\/vc_column][vc_column column_width_percent=\u00a0\u00bb100&Prime; position_vertical=\u00a0\u00bbmiddle\u00a0\u00bb gutter_size=\u00a0\u00bb3&Prime; font_family=\u00a0\u00bbfont-613363&Prime; overlay_alpha=\u00a0\u00bb50&Prime; shift_x=\u00a0\u00bb0&Prime; shift_y=\u00a0\u00bb0&Prime; shift_y_down=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; medium_width=\u00a0\u00bb0&Prime; mobile_width=\u00a0\u00bb0&Prime; css_animation=\u00a0\u00bbalpha-anim\u00a0\u00bb animation_speed=\u00a0\u00bb1000&Prime; width=\u00a0\u00bb3\/4&Prime; uncode_shortcode_id=\u00a0\u00bb484410&Prime;][vc_custom_heading heading_semantic=\u00a0\u00bbh1&Prime; text_size=\u00a0\u00bbh3&Prime; uncode_shortcode_id=\u00a0\u00bb787473&Prime; el_id=\u00a0\u00bbnav-overview\u00a0\u00bb]Bienvenue dans notre engagement en faveur de l&rsquo;\u00e9galit\u00e9, de la diversit\u00e9 et de l&rsquo;inclusion[\/vc_custom_heading][vc_column_text text_lead=\u00a0\u00bbyes\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb175631&Prime;]Dans le cadre du programme NumPEx, nous pensons que la diversit\u00e9 et la promotion d&rsquo;un environnement inclusif ne sont pas seulement des valeurs, mais des principes essentiels qui favorisent le progr\u00e8s, l&rsquo;innovation et le changement positif. Nous sommes fiers de pr\u00e9senter notre politique en mati\u00e8re d&rsquo;\u00e9galit\u00e9, de diversit\u00e9 et d&rsquo;inclusion (EDI), qui t\u00e9moigne de notre engagement in\u00e9branlable \u00e0 cr\u00e9er un lieu de travail et un monde o\u00f9 chacun, quelle que soit son origine ou son identit\u00e9, a la possibilit\u00e9 de s&rsquo;\u00e9panouir.[\/vc_column_text][vc_row_inner limit_content=\u00a0\u00bb\u00a0\u00bb][vc_column_inner width=\u00a0\u00bb1\/1&Prime;][vc_empty_space empty_h=\u00a0\u00bb2&Prime;][vc_separator sep_color=\u00a0\u00bbcolor-nhtu\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb794634&Prime; sep_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb][vc_empty_space empty_h=\u00a0\u00bb2&Prime;][\/vc_column_inner][\/vc_row_inner][vc_custom_heading text_color=\u00a0\u00bbaccent\u00a0\u00bb heading_semantic=\u00a0\u00bbh1&Prime; text_size=\u00a0\u00bbh3&Prime; uncode_shortcode_id=\u00a0\u00bb105378&Prime; el_id=\u00a0\u00bbnav-our-vision-for-EDI\u00a0\u00bb text_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb]Notre vision de l&rsquo;EDI[\/vc_custom_heading][vc_column_text text_lead=\u00a0\u00bbyes\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb132292&Prime;]Dans le monde interconnect\u00e9 d&rsquo;aujourd&rsquo;hui, il est plus important que jamais de reconna\u00eetre les contributions inestimables apport\u00e9es par des personnes d&rsquo;origines diverses. Notre vision est claire : nous voulons non seulement \u00eatre les pionniers d&rsquo;avanc\u00e9es r\u00e9volutionnaires dans le domaine du calcul intensif pour l&rsquo;\u00e8re Exascale, mais aussi \u00eatre des pr\u00e9curseurs dans la promotion de l&rsquo;\u00e9galit\u00e9, de la diversit\u00e9 et de l&rsquo;inclusion au sein de notre secteur d&rsquo;activit\u00e9. Nous comprenons qu&rsquo;atteindre une v\u00e9ritable excellence et repousser les limites de la d\u00e9couverte scientifique ne sont possibles que lorsque nous embrassons une riche mosa\u00efque de perspectives.[\/vc_column_text][vc_custom_heading text_color=\u00a0\u00bbaccent\u00a0\u00bb heading_semantic=\u00a0\u00bbh1&Prime; text_size=\u00a0\u00bbh3&Prime; uncode_shortcode_id=\u00a0\u00bb893352&Prime; el_id=\u00a0\u00bbintro-exa-atow-en\u00a0\u00bb text_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb]L&rsquo;importance de l&rsquo;EDI[\/vc_custom_heading][vc_column_text text_lead=\u00a0\u00bbyes\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb150247&Prime;]L&rsquo;\u00e9galit\u00e9, la diversit\u00e9 et l&rsquo;inclusion ne sont pas seulement des valeurs que nous d\u00e9fendons ; ce sont des principes fondamentaux qui d\u00e9terminent l&rsquo;essence m\u00eame de notre programme de recherche. Au sein de NumPEx, des \u00e9quipes diversifi\u00e9es apportent une vision \u00e0 multiples facettes, de la cr\u00e9ativit\u00e9 et de la r\u00e9silience pour relever des d\u00e9fis complexes. L&rsquo;EDI est la pierre angulaire sur laquelle nous construisons une communaut\u00e9 r\u00e9siliente et tourn\u00e9e vers l&rsquo;avenir, qui prosp\u00e8re face aux questions scientifiques profondes et aux fronti\u00e8res technologiques.[\/vc_column_text][vc_custom_heading text_color=\u00a0\u00bbaccent\u00a0\u00bb heading_semantic=\u00a0\u00bbh1&Prime; text_size=\u00a0\u00bbh3&Prime; uncode_shortcode_id=\u00a0\u00bb182839&Prime; el_id=\u00a0\u00bbintro-exa-atow-en\u00a0\u00bb text_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb]Notre engagement en faveur de l&rsquo;EDI[\/vc_custom_heading][vc_column_text text_lead=\u00a0\u00bbyes\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb551542&Prime;]Dans les sections suivantes, vous d\u00e9couvrirez le cadre global de notre politique d&rsquo;\u00e9galit\u00e9, de diversit\u00e9 et d&rsquo;inclusion (EDE). Cette politique souligne notre engagement in\u00e9branlable en faveur de.. :[\/vc_column_text][uncode_list uncode_shortcode_id=\u00a0\u00bb172775&Prime;]<\/p>\n<ul>\n<li><strong>Favoriser l&rsquo;innovation dans notre domaine scientifique :<\/strong> Exploiter la puissance de diverses perspectives pour r\u00e9aliser des avanc\u00e9es r\u00e9volutionnaires<\/li>\n<li><strong>Am\u00e9liorer la prise de d\u00e9cision :<\/strong> Faire des choix \u00e9clair\u00e9s qui respectent et int\u00e8grent un large \u00e9ventail de points de vue.<\/li>\n<li><strong>Renforcer l&rsquo;engagement :<\/strong> Cr\u00e9er un espace de travail inclusif o\u00f9 tous les participants sont valoris\u00e9s et motiv\u00e9s.<\/li>\n<li><strong>Attirer et retenir les talents :<\/strong> constituer une main-d&rsquo;\u0153uvre diversifi\u00e9e qui repr\u00e9sente les multiples facettes du monde du calcul intensif.<\/li>\n<li><strong>Refl\u00e9ter la diversit\u00e9 du march\u00e9 :<\/strong> Comprendre et r\u00e9pondre aux besoins sp\u00e9cifiques des diff\u00e9rents partenaires et parties prenantes de la recherche.<\/li>\n<li><strong>Conformit\u00e9 et \u00e9thique :<\/strong> Respecter les normes les plus strictes en mati\u00e8re d&rsquo;\u00e9galit\u00e9 et d&rsquo;\u00e9quit\u00e9 dans notre domaine de recherche.<\/li>\n<li><strong>Renforcer la r\u00e9putation :<\/strong> Gagner le respect et la confiance de la communaut\u00e9 mondiale.<\/li>\n<li><strong>Promouvoir la justice sociale :<\/strong> Contribuer \u00e0 un avenir o\u00f9 l&rsquo;\u00e9quit\u00e9 et l&rsquo;inclusion sont la norme et non l&rsquo;exception.<\/li>\n<\/ul>\n<p>[\/uncode_list][vc_column_text text_lead=\u00a0\u00bbyes\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb197956&Prime;]Nous vous invitons \u00e0 d\u00e9couvrir notre politique en mati\u00e8re d&rsquo;IDE et \u00e0 nous rejoindre dans ce voyage vers un avenir plus \u00e9quitable, plus diversifi\u00e9 et plus inclusif. Ensemble, nous pouvons construire un monde meilleur o\u00f9 chacun peut s&rsquo;\u00e9panouir, quelles que soient ses origines ou son identit\u00e9. <\/p>\n<p>Merci de participer \u00e0 notre engagement en faveur de l&rsquo;\u00e9galit\u00e9, de la diversit\u00e9 et de l&rsquo;inclusion.<\/p>\n<p>Le groupe de travail NumPEx EDI[\/vc_column_text][vc_row_inner row_inner_height_percent=\u00a0\u00bb0&Prime; overlay_alpha=\u00a0\u00bb50&Prime; gutter_size=\u00a0\u00bb3&Prime; shift_y=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; limit_content=\u00a0\u00bb\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb144338&Prime; el_id=\u00a0\u00bbour-code-of-conduct-en\u00a0\u00bb][vc_column_inner width=\u00a0\u00bb1\/1&Prime;][vc_empty_space empty_h=\u00a0\u00bb2&Prime;][vc_separator sep_color=\u00a0\u00bbcolor-nhtu\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb794634&Prime; sep_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb][vc_empty_space empty_h=\u00a0\u00bb2&Prime;][\/vc_column_inner][\/vc_row_inner][vc_custom_heading heading_semantic=\u00a0\u00bbh1&Prime; text_size=\u00a0\u00bbh3&Prime; uncode_shortcode_id=\u00a0\u00bb597488&Prime; el_id=\u00a0\u00bbnav-our-code-of-conduct\u00a0\u00bb]Notre code de conduite[\/vc_custom_heading][vc_single_image media=\u00a0\u00bb1080&Prime; media_lightbox=\u00a0\u00bbyes\u00a0\u00bb media_width_percent=\u00a0\u00bb80&Prime; alignment=\u00a0\u00bbcenter\u00a0\u00bb border=\u00a0\u00bbyes\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb139060&Prime;][vc_single_image media=\u00a0\u00bb1082&Prime; media_lightbox=\u00a0\u00bbyes\u00a0\u00bb media_width_percent=\u00a0\u00bb80&Prime; alignment=\u00a0\u00bbcenter\u00a0\u00bb border=\u00a0\u00bbyes\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb135168&Prime;][vc_row_inner row_inner_height_percent=\u00a0\u00bb0&Prime; row_padding=\u00a0\u00bb0&Prime; overlay_alpha=\u00a0\u00bb50&Prime; gutter_size=\u00a0\u00bb3&Prime; shift_y=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; limit_content=\u00a0\u00bb\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb983225&Prime;][vc_column_inner width=\u00a0\u00bb1\/1&Prime;][vc_empty_space empty_h=\u00a0\u00bb2&Prime;][vc_separator sep_color=\u00a0\u00bbcolor-nhtu\u00a0\u00bb uncode_shortcode_id=\u00a0\u00bb794634&Prime; sep_color_type=\u00a0\u00bbuncode-palette\u00a0\u00bb][vc_empty_space empty_h=\u00a0\u00bb2&Prime; el_id=\u00a0\u00bbnav-useful-links\u00a0\u00bb][\/vc_column_inner][\/vc_row_inner][vc_custom_heading uncode_shortcode_id=\u00a0\u00bb661693&Prime;]<strong>Renforcer la diversit\u00e9 et l&rsquo;\u00e9galit\u00e9 dans la recherche fran\u00e7aise<\/strong>[\/vc_custom_heading][vc_column_text uncode_shortcode_id=\u00a0\u00bb121897&Prime;]Pour promouvoir la diversit\u00e9 et l&rsquo;\u00e9quilibre entre les hommes et les femmes dans la recherche fran\u00e7aise, il est important d&rsquo;\u00e9tablir des liens vers des pages web d\u00e9di\u00e9es. Ces liens facilitent le partage des connaissances, engagent la communaut\u00e9, mettent en lumi\u00e8re les initiatives, inspirent les individus et contribuent \u00e0 un changement culturel. En nous connectant \u00e0 des ressources externes, nous participons activement \u00e0 la promotion d&rsquo;un environnement de recherche plus inclusif et plus \u00e9quitable. Dans cette section, vous trouverez une s\u00e9lection de liens utiles &#8211; bien que non exhaustive &#8211; sur des sujets allant de la diversit\u00e9 et de l&rsquo;\u00e9quilibre entre les sexes \u00e0 l&rsquo;\u00e9galit\u00e9.[\/vc_column_text][uncode_list uncode_shortcode_id=\u00a0\u00bb960984&Prime;]<\/p>\n<ul>\n<li><strong>Femmes et Sciences :<\/strong> Plongez dans le monde des femmes en sciences gr\u00e2ce aux ressources et aux ateliers propos\u00e9s par <a href=\"https:\/\/www.femmesetsciences.fr\/\" target=\"_new\" rel=\"noopener\">Femmes et Sciences<\/a>. D\u00e9couvrez du mat\u00e9riel pr\u00e9cieux et des exemples d&rsquo;ateliers de formation <a href=\"https:\/\/www.femmesetsciences.fr\/ressources\" target=\"_new\" rel=\"noopener\">ici<\/a> et explorez leurs initiatives phares <a href=\"https:\/\/www.femmesetsciences.fr\/actions-phare\" target=\"_new\" rel=\"noopener\">ici<\/a>. <\/li>\n<li><strong>Femmes et Num\u00e9rique :<\/strong> D\u00e9couvrez le dossier \u00e9clairant \u00ab\u00a0Femmes et Num\u00e9rique : Ensemble, cassons les codes !\u00a0\u00bb pour une exploration compl\u00e8te de la rupture des barri\u00e8res de genre dans le domaine num\u00e9rique. Acc\u00e9der au dossier <a href=\"https:\/\/www.femmesetsciences.fr\/_files\/ugd\/10ca83_ce661009072e4799895c4f703ad750b3.pdf\" target=\"_new\" rel=\"noopener\">ici<\/a>. <\/li>\n<li><strong>Les femmes dans le HPC :<\/strong> Entrez en contact avec la communaut\u00e9 mondiale des <a href=\"https:\/\/www.womeninhpc.org\/\" target=\"_new\" rel=\"noopener\">femmes dans le domaine<\/a> du calcul haute performance pour vous tenir au courant de leurs initiatives et collaborations, qui favorisent la diversit\u00e9 et l&rsquo;inclusion dans le domaine du calcul haute performance.<\/li>\n<li><strong>Les D\u00e9codeuses du Num\u00e9rique\u00a0\u00bb<\/strong> cr\u00e9\u00e9es par le CNRS <a href=\"https:\/\/www.calameo.com\/read\/006841715804996467dcf?authid=cG5djzzVzuiW\">: https:\/\/www.calameo.com\/read\/006841715804996467dcf?authid=cG5djzzVzuiW<\/a><\/li>\n<li><strong>Une s\u00e9rie de vid\u00e9os sur les bonnes pratiques pour lutter contre<\/strong> <strong>les pr\u00e9jug\u00e9s<\/strong><strong>en mati\u00e8re de recrutement<\/strong>: <a href=\"https:\/\/www.irit.fr\/missions\/egalite-parite\/lutter-contre-les-biais-de-recrutement\/\">https:\/\/www.irit.fr\/missions\/egalite-parite\/lutter-contre-les-biais-de-recrutement\/<\/a><\/li>\n<\/ul>\n<p>[\/uncode_list][\/vc_column][\/vc_row]<\/p>\n<\/div>","protected":false},"excerpt":{"rendered":"<p>[vc_row row_height_percent=\u00a0\u00bb0&Prime; overlay_alpha=\u00a0\u00bb50&Prime; gutter_size=\u00a0\u00bb3&Prime; column_width_percent=\u00a0\u00bb100&Prime; shift_y=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; sticky=\u00a0\u00bbyes\u00a0\u00bb content_parallax=\u00a0\u00bb0&Prime; uncode_shortcode_id=\u00a0\u00bb165842&Prime; css=\u00a0\u00bb.vc_custom_1785924495010{margin-top: 1% !important;}\u00a0\u00bb][vc_column width=\u00a0\u00bb1\/1&Prime;][vc_raw_html]PCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBOdW1QRXgg4oCUIE1lbnUgZGUgc2VjdGlvbnMgc3RpY2t5IOKAlCB2LjYuNAogIE5hb3MgQWdlbmN5IMK3IDIwMjYtMDktMTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgoKPHN0eWxlPgogIDpyb290eyAtLW5weC10b3A6IDYwcHg7IH0gLyogaGF1dGV1ciBkdSBoZWFkZXIgVW5jb2RlIHN0aWNreSAqLwogIC5ucHgtc3VibmF2ewogICAgYmFja2dyb3VuZDogI0UwOTkwMDsgLyogb3JhbmdlIGQnYWNjZW50dWF0aW9uIE51bVBFeCAqLwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjA4KTsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHotaW5kZXg6IDQwOwogIH0KICAubnB4LXN1Ym5hdltoaWRkZW5deyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAubnB4LXN1Ym5hdi5ucHgtc3R1Y2t7IGJvcmRlci1yYWRpdXM6IDAgMCAxMnB4IDEycHg7IH0KICAubnB4LXN1Ym5hdi5ucHgtc3R1Y2t7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IHZhcigtLW5weC10b3ApOwogICAgbGVmdDogMDsgcmlnaHQ6IDA7CiAgfQogIC5ucHgtc3VibmF2X19pbm5lcnsKICAgIC8qIHYuNi40IDogbWV0cmlxdWVzIHBpbG90ZWVzIHBhciB2YXJpYWJsZXMuIExlcyB2YWxldXJzIGRlIHJlcGxpCiAgICAgICBTT05UIGNlbGxlcyBkZSBsYSB2LjYuMiA6IHNhbnMgSlMsIHJlbmR1IGlkZW50aXF1ZS4gKi8KICAgIG1heC13aWR0aDogMTE0MHB4OwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDAgdmFyKC0tbnB4LWdhcCwgMTBweCk7CiAgICBtaW4taGVpZ2h0OiA0NnB4OwogICAgcGFkZGluZy10b3A6IDZweDsKICAgIHBhZGRpbmctYm90dG9tOiA2cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZm9udC1zaXplOiB2YXIoLS1ucHgtZnMsIDExcHgpOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiB2YXIoLS1ucHgtbHMsIC4xMmVtKTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOwogICAgLyogZm9udC1mYW1pbHk6ICdQb3BwaW5zJywgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOyAqLwogIH0KICAubnB4LXN1Ym5hdl9faW5uZXI6Oi13ZWJraXQtc2Nyb2xsYmFyeyBkaXNwbGF5OiBub25lOyB9CiAgLyogU3DDqWNpZmljaXTDqSByZW5mb3Jjw6llICsgIWltcG9ydGFudCA6IG5ldXRyYWxpc2UgbGVzIGNvdWxldXJzIGRlIGxpZW5zIGR1IHRow6htZSBVbmNvZGUgKG9yYW5nZSBhdSBzdXJ2b2wvY2xpYykgKi8KICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYSwKICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYTp2aXNpdGVkewogICAgY29sb3I6IHJnYmEoMjU1LDI1MCwyNDMsLjg4KSAhaW1wb3J0YW50OyAvKiBibGFuYyBjYXNzw6kgKi8KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogOHB4IHZhcigtLW5weC1weCwgMTRweCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIHRyYW5zaXRpb246IGNvbG9yIC4xOHMsIGJhY2tncm91bmQtY29sb3IgLjE4czsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7ICAvKiB2LjYuNCA6IHVuIGxpYmVsbGUgbmUgc2UgY291cGUgamFtYWlzICovCiAgICBmbGV4OiAwIDAgYXV0bzsgICAgICAgLyogdi42LjQgOiBsZXMgcGFzdGlsbGVzIG5lIHNlIGNvbXByaW1lbnQgcGFzICovCiAgfQogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmhvdmVyLAogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmZvY3VzLAogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmFjdGl2ZXsKICAgIGNvbG9yOiAjRkZGRkZGICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLC4xMik7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9CiAgbmF2Lm5weC1zdWJuYXYgLm5weC1zdWJuYXZfX2lubmVyIGEubnB4LWFjdGl2ZSwKICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYS5ucHgtYWN0aXZlOmhvdmVyewogICAgY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICNBODZGMDA7IC8qIG9yYW5nZSBmb25jw6ksIGFwbGF0IHNpbXBsZSAqLwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICB9Cjwvc3R5bGU+Cgo8bmF2IGNsYXNzPSJucHgtc3VibmF2IiBhcmlhLWxhYmVsPSJQYWdlIHNlY3Rpb25zIiBoaWRkZW4+CiAgPGRpdiBjbGFzcz0ibnB4LXN1Ym5hdl9faW5uZXIiPjwvZGl2Pgo8L25hdj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpewogICd1c2Ugc3RyaWN0JzsKCiAgLyogPT09PT09PT09PT09PT09PT09PT0gQ09ORklHIFNJVEUgPT09PT09PT09PT09PT09PT09PT0KICAgICBTZXVsZSB6b25lIMOgIGFkYXB0ZXIgcG91ciByw6l1dGlsaXNlciBsZSBibG9jIGFpbGxldXJzLiAqLwogIHZhciBQUkVGSVggPSAnbmF2LSc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByw6lmaXhlIGRlcyBSb3cgSUQgw6AgZMOpdGVjdGVyICovCiAgdmFyIFNUUklQICA9IFsvLShlbnxmcikkL2ksIC8tZXhhLVthLXowLTldKyQvaV07ICAgLyogc3VmZml4ZXMgZCd1bmljaXTDqSDDoCBpZ25vcmVyICAqLwoKICAvKiBSZXBsaSBwb3VyIGxlcyBwYWdlcyBQQVMgRU5DT1JFIE1JR1LDiUVTIHZlcnMgbGUgcHLDqWZpeGUgbmF2LQogICAgICh0eXBpcXVlbWVudCBsZXMgdHJhZHVjdGlvbnMgV1BNTCBkb250IGxlcyBSb3cgSUQgbidvbnQgcGFzIMOpdMOpCiAgICAgcmVub21tw6lzKS4gVXRpbGlzw6kgVU5JUVVFTUVOVCBzaSBsYSBwYWdlIG5lIGNvbnRpZW50IGF1Y3VuZSByb3cKICAgICDCqyBuYXYtIMK7LiBSZXByZW5kIGxlcyBjbMOpcyBkZSBsYSB2LjUgOiB1bmUgcm93IG5vbW3DqWUKICAgICDCqyBjb25zb3J0aXVtLWV4YS1tYS1lbiDCuyBvdSBzaW1wbGVtZW50IMKrIGNvbnNvcnRpdW0gwrsgZXN0CiAgICAgcmV0cm91dsOpZS4gTGlzdGUgZmVybcOpZSA9IGF1Y3VuIHJpc3F1ZSBkZSBmYXV4IHBvc2l0aWYuICovCiAgdmFyIExFR0FDWV9LRVlTID0gWwogICAgJ292ZXJ2aWV3JywgJ2NvbnNvcnRpdW0nLCAncmVzdWx0cycsICdtZXRyaWNzJywgJ3NvZnR3YXJlJywKICAgICduZXdzJywgJ2V2ZW50cycsICdhZ2VuZGEnLCAndGVhbScsICdjb250YWN0JwogIF07CgogIHZhciBMQUJFTFMgPSB7CiAgICAvKiBMaWJlbGzDqXMgcHLDqWbDqXLDqXMgcGFyIGNsw6kuIFRvdXRlIGNsw6kgYWJzZW50ZSBlc3QgYWZmaWNow6llCiAgICAgICBjYXBpdGFsaXPDqWUgdGVsbGUgcXVlbGxlIChuYXYtam9pbi11cyAtPiDCqyBKb2luIFVzIMK7KS4gKi8KICAgIGVuOiB7CiAgICAgICdjb25zb3J0aXVtJzogJ0NvbnNvcnRpdW0gJiBXb3JrcGFja2FnZXMnLAogICAgICAncmVzdWx0cyc6ICAgICdSZXN1bHRzICYgSW1wYWN0JywKICAgICAgJ21ldHJpY3MnOiAgICAnUHJvamVjdCBNZXRyaWNzJywKICAgICAgJ3RlYW0nOiAgICAgICAnVGhlIFRlYW0nCiAgICB9LAogICAgZnI6IHsKICAgICAgJ292ZXJ2aWV3JzogICAnUHLDqXNlbnRhdGlvbicsCiAgICAgICdjb25zb3J0aXVtJzogJ0NvbnNvcnRpdW0gZXQgbG90cyBkZSB0cmF2YWlsJywKICAgICAgJ3Jlc3VsdHMnOiAgICAnUsOpc3VsdGF0cyBldCBpbXBhY3QnLAogICAgICAnbWV0cmljcyc6ICAgICdDaGlmZnJlcyBjbMOpcycsCiAgICAgICdzb2Z0d2FyZSc6ICAgJ0xvZ2ljaWVscycsCiAgICAgICduZXdzJzogICAgICAgJ0FjdHVhbGl0w6lzJywKICAgICAgJ2V2ZW50cyc6ICAgICAnw4l2w6huZW1lbnRzJywKICAgICAgJ3RlYW0nOiAgICAgICAnTOKAmcOpcXVpcGUnCiAgICB9CiAgfTsKICB2YXIgU1RJQ0tfTU9ERSA9ICd1bmNvZGUnOyAvKiAndW5jb2RlJyA9IGxhIHJvdyBnw6hyZSBsZSBzdGlja3kgwrcgJ2pzJyA9IGxlIHNjcmlwdCBjb2xsZSBsdWktbcOqbWUgKi8KICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKICB2YXIgREVCVUcgPSAvWz8mXW5weGRlYnVnPTEvLnRlc3Qod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgZnVuY3Rpb24gbG9nKCl7CiAgICBpZighREVCVUcgfHwgIXdpbmRvdy5jb25zb2xlIHx8ICFjb25zb2xlLmxvZykgcmV0dXJuOwogICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgWydbbnB4LXN1Ym5hdl0nXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CiAgfQoKICAvKiAtLS0tIExhbmd1ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgPGh0bWwgbGFuZz4gcG9zw6kgcGFyIFdQTUwuIFJlcGxpcyBzdWNjZXNzaWZzIHNpIGwnYXR0cmlidXQgbWFucXVlIDoKICAgICB1biBhbmPDqnRyZSBwb3J0ZXVyIGRlIGxhbmcsIHB1aXMgbGVzIGNsYXNzZXMgZHUgYm9keS4gKi8KICBmdW5jdGlvbiBkZXRlY3RMYW5nKGVsKXsKICAgIHZhciB0YWcgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYW5nJykgfHwgJyc7CiAgICBpZighdGFnICYmIGVsICYmIGVsLmNsb3Nlc3QpewogICAgICB2YXIgaG9zdCA9IGVsLmNsb3Nlc3QoJ1tsYW5nXScpOwogICAgICBpZihob3N0KXsgdGFnID0gaG9zdC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKSB8fCAnJzsgfQogICAgfQogICAgaWYoIXRhZyl7CiAgICAgIHZhciBjbHMgPSAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSkgfHwgJyc7CiAgICAgIGlmKC8oPzpsYW5nfGxhbmd1YWdlKS1mclxifGZyW18tXUZSL2kudGVzdChjbHMpKXsgdGFnID0gJ2ZyJzsgfQogICAgfQogICAgcmV0dXJuIC9eZnIvaS50ZXN0KHRhZykgPyAnZnInIDogJ2VuJzsKICB9CgogIGZ1bmN0aW9uIGtleU9mKGlkKXsKICAgIHZhciBrID0gaWQuc2xpY2UoUFJFRklYLmxlbmd0aCkudG9Mb3dlckNhc2UoKTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBTVFJJUC5sZW5ndGg7IGkrKyl7IGsgPSBrLnJlcGxhY2UoU1RSSVBbaV0sICcnKTsgfQogICAgcmV0dXJuIGs7CiAgfQogIGZ1bmN0aW9uIHRpdGxlQ2FzZShrZXkpewogICAgcmV0dXJuIGtleS5zcGxpdCgnLScpLm1hcChmdW5jdGlvbih3KXsKICAgICAgcmV0dXJuIHcgPyB3LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdy5zbGljZSgxKSA6IHc7CiAgICB9KS5qb2luKCcgJyk7CiAgfQoKICAvKiBEb3VibGUgc8OpY3VyaXTDqSA6IMOpY2FydGUgbGVzIG1lbnVzIGfDqW7DqXLDqXMgcGFyIFdvcmRQcmVzcyBldCB0b3V0IGNlCiAgICAgcXVpIHZpdCBkYW5zIGxhIG5hdmlnYXRpb24gb3UgbGUgaGVhZGVyIOKAlCBpbmNoYW5nw6kgZGVwdWlzIGxhIHYuNi4xLiAqLwogIGZ1bmN0aW9uIGlzU2VjdGlvbkNhbmRpZGF0ZShlbCl7CiAgICB2YXIgdGFnID0gZWwudGFnTmFtZTsKICAgIGlmKHRhZyA9PT0gJ1VMJyB8fCB0YWcgPT09ICdMSScgfHwgdGFnID09PSAnQScgfHwgdGFnID09PSAnTkFWJyl7IHJldHVybiBmYWxzZTsgfQogICAgaWYoZWwuY2xvc2VzdCAmJiBlbC5jbG9zZXN0KCduYXYsIGhlYWRlciwgLm5weC1zdWJuYXYnKSl7IHJldHVybiBmYWxzZTsgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBpbkRvY3VtZW50T3JkZXIoYSwgYil7CiAgICB2YXIgcG9zID0gYS5zZWN0aW9uLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIuc2VjdGlvbik7CiAgICByZXR1cm4gKHBvcyAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSA\/IC0xIDogMTsKICB9CgogIC8qIC0tLS0gRMOpY291dmVydGUgZGVzIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgMSkgTW9kZSBub21pbmFsIDogdG91dGVzIGxlcyByb3dzIGRvbnQgbCdpZCBjb21tZW5jZSBwYXIgwqsgbmF2LSDCuy4KICAgICAyKSBSZXBsaSA6IHNpIGV0IHNldWxlbWVudCBzaSBsZSBtb2RlIDEgbmUgZG9ubmUgUklFTiwgb24gY2hlcmNoZQogICAgICAgIGxlcyBjbMOpcyBow6lyaXTDqWVzIGRlIGxhIHYuNSwgYXZlYyBvdSBzYW5zIHN1ZmZpeGUuCiAgICAgUmVudm9pZSB7IGVudHJpZXM6IFsuLi5dLCBtb2RlOiAncHJlZml4JyB8ICdsZWdhY3knIHwgJ25vbmUnIH0uICovCiAgZnVuY3Rpb24gZGlzY292ZXIoZGljdCl7CiAgICB2YXIgc2VlbiA9IE9iamVjdC5jcmVhdGUobnVsbCksIGVudHJpZXMgPSBbXTsKCiAgICBmdW5jdGlvbiBwdXNoKGVsLCBrZXkpewogICAgICBpZighZWwgfHwgIWtleSB8fCBzZWVuW2tleV0peyByZXR1cm47IH0KICAgICAgc2VlbltrZXldID0gdHJ1ZTsKICAgICAgZW50cmllcy5wdXNoKHsgc2VjdGlvbjogZWwsIGtleToga2V5LCBsYWJlbDogZGljdFtrZXldIHx8IHRpdGxlQ2FzZShrZXkpIH0pOwogICAgfQoKICAgIHZhciBmb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49IicgKyBQUkVGSVggKyAnIl0nKTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBmb3VuZC5sZW5ndGg7IGkrKyl7CiAgICAgIGlmKCFpc1NlY3Rpb25DYW5kaWRhdGUoZm91bmRbaV0pKXsgY29udGludWU7IH0KICAgICAgcHVzaChmb3VuZFtpXSwga2V5T2YoZm91bmRbaV0uaWQpKTsKICAgIH0KICAgIGlmKGVudHJpZXMubGVuZ3RoKXsKICAgICAgd2FybklmUGFydGlhbGx5TWlncmF0ZWQoc2Vlbik7CiAgICAgIHJldHVybiB7IGVudHJpZXM6IGVudHJpZXMsIG1vZGU6ICdwcmVmaXgnIH07CiAgICB9CgogICAgZm9yKHZhciBqID0gMDsgaiA8IExFR0FDWV9LRVlTLmxlbmd0aDsgaisrKXsKICAgICAgdmFyIGsgID0gTEVHQUNZX0tFWVNbal07CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGspIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZF49IicgKyBrICsgJy0iXScpOwogICAgICBpZihlbCAmJiBpc1NlY3Rpb25DYW5kaWRhdGUoZWwpKXsgcHVzaChlbCwgayk7IH0KICAgIH0KICAgIGlmKGVudHJpZXMubGVuZ3RoKXsKICAgICAgZW50cmllcy5zb3J0KGluRG9jdW1lbnRPcmRlcik7IC8qIGxhIGxpc3RlIGRlcyBjbMOpcyBuZSBzdWl0IHBhcyBsJ29yZHJlIGRlIGxhIHBhZ2UgKi8KICAgICAgcmV0dXJuIHsgZW50cmllczogZW50cmllcywgbW9kZTogJ2xlZ2FjeScgfTsKICAgIH0KCiAgICByZXR1cm4geyBlbnRyaWVzOiBlbnRyaWVzLCBtb2RlOiAnbm9uZScgfTsKICB9CgogIC8qIC0tLS0gTWlncmF0aW9uIHBhcnRpZWxsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIENhcyBwacOoZ2UgOiBzdXIgdW5lIG3Dqm1lIHBhZ2UgY2VydGFpbmVzIHJvd3Mgb250IMOpdMOpIHJlbm9tbcOpZXMgZW4KICAgICBuYXYt4oCmIGV0IGQnYXV0cmVzIG5vbi4gTGUgbW9kZSBub21pbmFsIGwnZW1wb3J0ZSBldCBsZXMgcm93cyBub24KICAgICByZW5vbW3DqWVzIGRpc3BhcmFpc3NlbnQgU0lMRU5DSUVVU0VNRU5UIGR1IG1lbnUuIE9uIGxlIHNpZ25hbGUuICovCiAgZnVuY3Rpb24gd2FybklmUGFydGlhbGx5TWlncmF0ZWQoc2Vlbil7CiAgICBpZighd2luZG93LmNvbnNvbGUgfHwgIWNvbnNvbGUud2Fybil7IHJldHVybjsgfQogICAgdmFyIHN0cmFnZ2xlcnMgPSBbXTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBMRUdBQ1lfS0VZUy5sZW5ndGg7IGkrKyl7CiAgICAgIHZhciBrID0gTEVHQUNZX0tFWVNbaV07CiAgICAgIGlmKHNlZW5ba10peyBjb250aW51ZTsgfSAvKiBkw6lqw6AgcHLDqXNlbnQgdmlhIHVuZSByb3cgbmF2LSAqLwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWRePSInICsgayArICctIl0nKTsKICAgICAgaWYoZWwgJiYgaXNTZWN0aW9uQ2FuZGlkYXRlKGVsKSl7IHN0cmFnZ2xlcnMucHVzaChrICsgJyAoIycgKyBlbC5pZCArICcpJyk7IH0KICAgIH0KICAgIGlmKCFzdHJhZ2dsZXJzLmxlbmd0aCl7IHJldHVybjsgfQogICAgY29uc29sZS53YXJuKAogICAgICAnW25weC1zdWJuYXZdIE1pZ3JhdGlvbiBpbmNvbXBsZXRlIHN1ciBjZXR0ZSBwYWdlIDogJyArIHN0cmFnZ2xlcnMubGVuZ3RoICsKICAgICAgJyByb3cocykgcG9ydGVudCBlbmNvcmUgdW4gYW5jaWVuIFJvdyBJRCBldCBzb250IEFCU0VOVEVTIGR1IG1lbnUgLT4gJyArCiAgICAgIHN0cmFnZ2xlcnMuam9pbignLCAnKSArICdcbicgKwogICAgICAnTGVzIHJlbm9tbWVyIGF2ZWMgbGUgcHJlZml4ZSAiJyArIFBSRUZJWCArICciIChleC4gJyArIFBSRUZJWCArIExFR0FDWV9LRVlTWzBdICsgJykuJwogICAgKTsKICB9CgogIC8qIC0tLS0gTWVzc2FnZSBkZSBkaWFnbm9zdGljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIEludmlzaWJsZSBwb3VyIGxlcyB2aXNpdGV1cnMsIGTDqWNpc2lmIHBvdXIgbGEgcGVyc29ubmUgcXVpIHJlcHJlbmQKICAgICBsZSBkb3NzaWVyIDogb24gZGl0IGNlIHF1aSBhIMOpdMOpIGNoZXJjaMOpIGV0IGNlIHF1aSBhIMOpdMOpIHRyb3V2w6kuICovCiAgZnVuY3Rpb24gd2Fybk5vdGhpbmdGb3VuZCgpewogICAgaWYoIXdpbmRvdy5jb25zb2xlIHx8ICFjb25zb2xlLndhcm4peyByZXR1cm47IH0KICAgIHZhciB3aXRoSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRdJyk7CiAgICBjb25zb2xlLndhcm4oCiAgICAgICdbbnB4LXN1Ym5hdl0gQXVjdW5lIHNlY3Rpb24gdHJvdXbDqWUgOiBsYSBiYXJyZSByZXN0ZSBtYXNxdcOpZS5cbicgKwogICAgICAnLSBSZWNoZXJjaMOpIGVuIHByaW9yaXTDqSA6IGRlcyBSb3cgSUQgY29tbWVuw6dhbnQgcGFyICInICsgUFJFRklYICsgJyIgKGV4LiBuYXYtb3ZlcnZpZXcpLlxuJyArCiAgICAgICctIFB1aXMsIGVuIHJlcGxpLCBsZXMgY2xlcyBoZXJpdGVlcyA6ICcgKyBMRUdBQ1lfS0VZUy5qb2luKCcsICcpICsgJy5cbicgKwogICAgICAnLSBQYWdlIGxhbmc9IicgKyAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnbGFuZycpIHx8ICcoYWJzZW50KScpICsgJyIsICcgKwogICAgICB3aXRoSWQubGVuZ3RoICsgJyBlbGVtZW50KHMpIHBvcnRlbnQgdW4gaWQuXG4nICsKICAgICAgJy0gQ2F1c2UgbGEgcGx1cyBmcmVxdWVudGUgOiBsZXMgUm93IElEIGRlIENFVFRFIHBhZ2UgbmUgc29udCBwYXMgbm9tbWVzLiAnICsKICAgICAgJ1NvdXMgV1BNTCB1bmUgdHJhZHVjdGlvbiBlc3QgdW4gcG9zdCBkaXN0aW5jdCDigJQgcmVub21tZXIgbGVzIFJvdyBJRCBkZSBsYSBwYWdlICcgKwogICAgICAnc291cmNlIG5lIHJlbm9tbWUgcGFzIGNldXggZGUgbGEgdHJhZHVjdGlvbiA6IGlsIGZhdXQgbGVzIHNhaXNpciBzdXIgY2hhcXVlIGxhbmd1ZS5cbicgKwogICAgICAnLSBQb3VyIGxhIGxpc3RlIGRlcyBpZHMgcHJlc2VudHMsIHJlY2hhcmdlciBsYSBwYWdlIGF2ZWMgP25weGRlYnVnPTEnCiAgICApOwogICAgaWYoREVCVUcpewogICAgICB2YXIgaWRzID0gW107CiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB3aXRoSWQubGVuZ3RoOyBpKyspeyBpZHMucHVzaCh3aXRoSWRbaV0uaWQpOyB9CiAgICAgIGNvbnNvbGUud2FybignW25weC1zdWJuYXZdIGlkcyBwcmVzZW50cyBzdXIgbGEgcGFnZSA6JywgaWRzKTsKICAgIH0KICB9CgogIC8qIC0tLS0gSW5pdGlhbGlzYXRpb24gZCd1bmUgaW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICBSZW52b2llIHRydWUgc2kgbGEgYmFycmUgYSDDqXTDqSBjb25zdHJ1aXRlLCBmYWxzZSBzJ2lsIG4neSBhdmFpdAogICAgIGF1Y3VuZSBzZWN0aW9uIChsJ2luc3RhbmNlIHJlc3RlIGFsb3JzIMOpbGlnaWJsZSDDoCB1bmUgbm91dmVsbGUKICAgICB0ZW50YXRpdmUgOiBkYXRhLW5weC1yZWFkeSBuJ2VzdCBwb3PDqSBxdSdlbiBjYXMgZGUgc3VjY8OocykuICovCiAgZnVuY3Rpb24gaW5pdChuYXYpewogICAgdmFyIGlubmVyID0gbmF2LnF1ZXJ5U2VsZWN0b3IoJy5ucHgtc3VibmF2X19pbm5lcicpOwogICAgaWYoIWlubmVyKXsKICAgICAgbmF2LnNldEF0dHJpYnV0ZSgnZGF0YS1ucHgtcmVhZHknLCAnMScpOyAvKiBiYWxpc2FnZSBpbmF0dGVuZHUgOiBuZSBwYXMgYm91Y2xlciBkZXNzdXMgKi8KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgdmFyIGxhbmcgID0gZGV0ZWN0TGFuZyhuYXYpOwogICAgdmFyIGRpY3QgID0gTEFCRUxTW2xhbmddIHx8IHt9OwogICAgdmFyIGZvdW5kID0gZGlzY292ZXIoZGljdCk7CiAgICB2YXIgZW50cmllcyA9IGZvdW5kLmVudHJpZXM7CgogICAgaWYoIWVudHJpZXMubGVuZ3RoKXsgcmV0dXJuIGZhbHNlOyB9CgogICAgbmF2LnNldEF0dHJpYnV0ZSgnZGF0YS1ucHgtcmVhZHknLCAnMScpOwogICAgbG9nKCdtb2RlID0nLCBmb3VuZC5tb2RlLCAnfCBsYW5nID0nLCBsYW5nLCAnfCBlbnRyZWVzID0nLCBlbnRyaWVzLm1hcChmdW5jdGlvbihlKXsKICAgICAgcmV0dXJuIGUua2V5ICsgJyAtPiAnICsgZS5sYWJlbCArICcgKCMnICsgZS5zZWN0aW9uLmlkICsgJyknOwogICAgfSkpOwoKICAgIGlubmVyLmlubmVySFRNTCA9ICcnOwogICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgYS5ocmVmID0gJyMnICsgZS5zZWN0aW9uLmlkOwogICAgICBhLnRleHRDb250ZW50ID0gZS5sYWJlbDsKICAgICAgaW5uZXIuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIGUubGluayA9IGE7CiAgICB9KTsKICAgIG5hdi5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwoKICAgIC8qIC0tLS0gdi42LjQgOiBsYSBiYXJyZSB0aWVudCBzdXIgdW5lIGxpZ25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgZmxleC13cmFwOm5vd3JhcCBzdXBwcmltZSBsYSAyZSBsaWduZS4gT24gbWVzdXJlIGV0IG9uIHJldGllbnQgbGUKICAgICAgIFBSRU1JRVIgcGFsaWVyIHF1aSByZW50cmUuIExlIHBhbGllciAwIGVzdCBsZSByZW5kdSB2LjYuMiA6IHVuZQogICAgICAgYmFycmUgcXVpIHJlbnRyYWl0IGRlamEgbmUgYm91Z2UgcGFzIGQndW4gcGl4ZWwuIFNpIG1lbWUgbGUKICAgICAgIHBsYW5jaGVyIGRlYm9yZGUgKHRlbGVwaG9uZSksIGxhIGJhcnJlIGRlZmlsZSBob3Jpem9udGFsZW1lbnQuCiAgICAgICBUb3V0IGVzdCBlbnZlbG9wcGUgOiBlbiBjYXMgZCdlcnJldXIgb24gcmV2aWVudCBhdSBwYWxpZXIgMC4gKi8KICAgIHZhciBTVEVQUyA9IFsKICAgICAgeyBmczogJzExcHgnLCAgIGxzOiAnLjEyZW0nLCBweDogJzE0cHgnLCBnYXA6ICcxMHB4JyB9LCAvKiByZW5kdSB2LjYuMiAqLwogICAgICB7IGZzOiAnMTFweCcsICAgbHM6ICcuMDllbScsIHB4OiAnMTNweCcsIGdhcDogJzlweCcgIH0sCiAgICAgIHsgZnM6ICcxMC41cHgnLCBsczogJy4wN2VtJywgcHg6ICcxMnB4JywgZ2FwOiAnOHB4JyAgfSwKICAgICAgeyBmczogJzEwcHgnLCAgIGxzOiAnLjA2ZW0nLCBweDogJzExcHgnLCBnYXA6ICc3cHgnICB9LAogICAgICB7IGZzOiAnOS41cHgnLCAgbHM6ICcuMDVlbScsIHB4OiAnMTBweCcsIGdhcDogJzZweCcgIH0sCiAgICAgIHsgZnM6ICc5cHgnLCAgICBsczogJy4wNGVtJywgcHg6ICc5cHgnLCAgZ2FwOiAnNXB4JyAgfSAgLyogcGxhbmNoZXIgKi8KICAgIF07CiAgICBmdW5jdGlvbiBhcHBseVN0ZXAocyl7CiAgICAgIHZhciBzdCA9IGlubmVyLnN0eWxlOwogICAgICBzdC5zZXRQcm9wZXJ0eSgnLS1ucHgtZnMnLCAgcy5mcyk7CiAgICAgIHN0LnNldFByb3BlcnR5KCctLW5weC1scycsICBzLmxzKTsKICAgICAgc3Quc2V0UHJvcGVydHkoJy0tbnB4LXB4JywgIHMucHgpOwogICAgICBzdC5zZXRQcm9wZXJ0eSgnLS1ucHgtZ2FwJywgcy5nYXApOwogICAgfQogICAgZnVuY3Rpb24gb3ZlcmZsb3dpbmcoKXsgcmV0dXJuIGlubmVyLnNjcm9sbFdpZHRoID4gaW5uZXIuY2xpZW50V2lkdGggKyAxOyB9CgogICAgdmFyIGZpdHRpbmcgPSBmYWxzZSwgbGFzdFcgPSAtMTsKICAgIGZ1bmN0aW9uIGZpdCgpewogICAgICBpZihmaXR0aW5nKXsgcmV0dXJuOyB9CiAgICAgIGZpdHRpbmcgPSB0cnVlOwogICAgICB0cnl7CiAgICAgICAgLyogQmFycmUgbm9uIG1lc3VyYWJsZSAobWFzcXVlZSwgb25nbGV0IHJlcGxpZSkgOiBuZSByaWVuIGNvbmNsdXJlLiAqLwogICAgICAgIGlmKGlubmVyLmNsaWVudFdpZHRoID4gNDApewogICAgICAgICAgdmFyIGksIGNob3NlbiA9IFNURVBTLmxlbmd0aCAtIDE7CiAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBTVEVQUy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgIGFwcGx5U3RlcChTVEVQU1tpXSk7CiAgICAgICAgICAgIGlmKCFvdmVyZmxvd2luZygpKXsgY2hvc2VuID0gaTsgYnJlYWs7IH0KICAgICAgICAgIH0KICAgICAgICAgIGlmKGNob3NlbiAhPT0gaSl7IGFwcGx5U3RlcChTVEVQU1tjaG9zZW5dKTsgfQogICAgICAgICAgbGFzdFcgPSBuYXYuY2xpZW50V2lkdGg7CiAgICAgICAgfQogICAgICB9Y2F0Y2goZXJyKXsKICAgICAgICBhcHBseVN0ZXAoU1RFUFNbMF0pOyAgLyogamFtYWlzIGRlIGJhcnJlIGNhc3NlZSAqLwogICAgICB9CiAgICAgIGZpdHRpbmcgPSBmYWxzZTsKICAgIH0KICAgIGZpdCgpOwoKICAgIC8qIExhIHBvbGljZSBkdSB0aGVtZSBhcnJpdmUgZW4gYXN5bmNocm9uZSA6IHJlbWVzdXJlciBhIHNvbiBhcnJpdmVlLiAqLwogICAgaWYoZG9jdW1lbnQuZm9udHMgJiYgZG9jdW1lbnQuZm9udHMucmVhZHkgJiYgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbil7CiAgICAgIHRyeXsgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihmaXQsIGZpdCk7IH1jYXRjaChlcnIpe30KICAgIH0KICAgIHNldFRpbWVvdXQoZml0LCA2MDApOwogICAgc2V0VGltZW91dChmaXQsIDIwMDApOwoKICAgIC8qIExlIHBhc3NhZ2UgZW4gc3RpY2t5IGNoYW5nZSBsYSBsYXJnZXVyIHNhbnMgZXZlbmVtZW50IHJlc2l6ZS4gKi8KICAgIGlmKHdpbmRvdy5SZXNpemVPYnNlcnZlcil7CiAgICAgIHRyeXsKICAgICAgICBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24oKXsKICAgICAgICAgIGlmKG5hdi5jbGllbnRXaWR0aCAhPT0gbGFzdFcpeyBmaXQoKTsgfQogICAgICAgIH0pLm9ic2VydmUobmF2KTsKICAgICAgfWNhdGNoKGVycil7fQogICAgfQoKICAgIC8qIEVuIG1vZGUgZGVmaWxlbWVudCwgZ2FyZGVyIGxhIHBhc3RpbGxlIGFjdGl2ZSB2aXNpYmxlLiAqLwogICAgZnVuY3Rpb24gcmV2ZWFsKGxpbmspewogICAgICBpZighbGluayB8fCAhb3ZlcmZsb3dpbmcoKSl7IHJldHVybjsgfQogICAgICB2YXIgbCA9IGxpbmsub2Zmc2V0TGVmdCwgciA9IGwgKyBsaW5rLm9mZnNldFdpZHRoOwogICAgICB2YXIgdnMgPSBpbm5lci5zY3JvbGxMZWZ0LCB2ZSA9IHZzICsgaW5uZXIuY2xpZW50V2lkdGg7CiAgICAgIGlmKGwgPCB2cyl7IGlubmVyLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBsIC0gMTIpOyB9CiAgICAgIGVsc2UgaWYociA+IHZlKXsgaW5uZXIuc2Nyb2xsTGVmdCA9IHIgLSBpbm5lci5jbGllbnRXaWR0aCArIDEyOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9wT2Zmc2V0KCl7CiAgICAgIHZhciB2ID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0tbnB4LXRvcCcpOwogICAgICByZXR1cm4gcGFyc2VJbnQodiwgMTApIHx8IDA7CiAgICB9CiAgICAvKiBEw6lmaWxlbWVudCBhdmVjIGNvbXBlbnNhdGlvbiBkZXMgZGV1eCBtZW51cy4gKi8KICAgIGZ1bmN0aW9uIHRvdGFsT2Zmc2V0KCl7IHJldHVybiB0b3BPZmZzZXQoKSArIG5hdi5vZmZzZXRIZWlnaHQgKyA4OyB9CgogICAgLyogLS0tLSBDb2xsYWdlIDogZml4ZWQgKyBwbGFjZWhvbGRlciBhbnRpLXNhdXQgKG1vZGUgJ2pzJykgLS0tLSAqLwogICAgdmFyIHBoID0gbnVsbDsKICAgIGlmKFNUSUNLX01PREUgPT09ICdqcycpewogICAgICBwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwaC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBuYXYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocGgsIG5hdik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGljaygpewogICAgICBpZighcGgpeyByZXR1cm47IH0KICAgICAgdmFyIGFuY2hvciA9IChwaC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpID8gbmF2IDogcGg7CiAgICAgIHZhciBzaG91bGQgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIDw9IHRvcE9mZnNldCgpOwogICAgICBpZihzaG91bGQgJiYgIW5hdi5jbGFzc0xpc3QuY29udGFpbnMoJ25weC1zdHVjaycpKXsKICAgICAgICBwaC5zdHlsZS5oZWlnaHQgID0gbmF2Lm9mZnNldEhlaWdodCArICdweCc7CiAgICAgICAgcGguc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgbmF2LmNsYXNzTGlzdC5hZGQoJ25weC1zdHVjaycpOwogICAgICB9ZWxzZSBpZighc2hvdWxkICYmIG5hdi5jbGFzc0xpc3QuY29udGFpbnMoJ25weC1zdHVjaycpKXsKICAgICAgICBuYXYuY2xhc3NMaXN0LnJlbW92ZSgnbnB4LXN0dWNrJyk7CiAgICAgICAgcGguc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgfQoKICAgIC8qIC0tLS0gU2VjdGlvbiBhY3RpdmUgLS0tLSAqLwogICAgdmFyIGxhc3RDdXJyZW50ID0gbnVsbDsKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodCgpewogICAgICB2YXIgbGltaXQgPSB0b3RhbE9mZnNldCgpICsgNDsKICAgICAgdmFyIGN1cnJlbnQgPSBudWxsOwogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgaWYoZS5zZWN0aW9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8PSBsaW1pdCl7IGN1cnJlbnQgPSBlOyB9CiAgICAgIH0pOwogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgZS5saW5rLmNsYXNzTGlzdC50b2dnbGUoJ25weC1hY3RpdmUnLCBlID09PSBjdXJyZW50KTsKICAgICAgfSk7CiAgICAgIGlmKGN1cnJlbnQgIT09IGxhc3RDdXJyZW50KXsKICAgICAgICBsYXN0Q3VycmVudCA9IGN1cnJlbnQ7CiAgICAgICAgaWYoY3VycmVudCl7IHJldmVhbChjdXJyZW50LmxpbmspOyB9CiAgICAgIH0KICAgIH0KCiAgICAvKiAtLS0tIENsaWMgc3VyIHVuZSBlbnRyw6llIC0tLS0gKi8KICAgIHZhciBzbW9vdGggPSAhd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlczsKICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgZS5saW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXYpewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdmFyIHkgPSBlLnNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0IC0gdG90YWxPZmZzZXQoKTsKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHksIGJlaGF2aW9yOiBzbW9vdGggPyAnc21vb3RoJyA6ICdhdXRvJyB9KTsKICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgJyMnICsgZS5zZWN0aW9uLmlkKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBmdW5jdGlvbiBvblNjcm9sbCgpeyBzdGljaygpOyBoaWdobGlnaHQoKTsgfQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24oKXsgZml0KCk7IG9uU2Nyb2xsKCk7IH0pOwogICAgb25TY3JvbGwoKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLyogLS0tLSBBbW9yw6dhZ2UgOiB0b3V0ZXMgbGVzIGluc3RhbmNlcywgYXZlYyBxdWVscXVlcyByZWxhbmNlcyAtLS0tLS0KICAgICBMZXMgcm93cyBVbmNvZGUgcGV1dmVudCDDqnRyZSBpbmplY3TDqWVzIGFwcsOocyBsZSBET01Db250ZW50TG9hZGVkCiAgICAgKGxhenkgLyBBSkFYKSA6IG9uIHJldGVudGUgcGVuZGFudCB+Miw1IHMgYXZhbnQgZGUgY29uY2x1cmUuICovCiAgZnVuY3Rpb24gYm9vdCgpewogICAgdmFyIG5hdnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubnB4LXN1Ym5hdjpub3QoW2RhdGEtbnB4LXJlYWR5XSknKTsKICAgIHZhciBwZW5kaW5nID0gMDsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuYXZzLmxlbmd0aDsgaSsrKXsKICAgICAgaWYoIWluaXQobmF2c1tpXSkpeyBwZW5kaW5nKys7IH0KICAgIH0KICAgIHJldHVybiBwZW5kaW5nOwogIH0KCiAgZnVuY3Rpb24gcnVuKCl7CiAgICBpZihib290KCkgPT09IDApeyByZXR1cm47IH0KICAgIHZhciB0cmllcyA9IDA7CiAgICB2YXIgdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICB0cmllcysrOwogICAgICB2YXIgbGFzdCA9IHRyaWVzID49IDY7IC8qIDYgeCA0MDAgbXMgKi8KICAgICAgaWYoYm9vdCgpID09PSAwIHx8IGxhc3QpewogICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICAgIGlmKGxhc3QgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5weC1zdWJuYXY6bm90KFtkYXRhLW5weC1yZWFkeV0pJykpewogICAgICAgICAgd2Fybk5vdGhpbmdGb3VuZCgpOwogICAgICAgIH0KICAgICAgfQogICAgfSwgNDAwKTsKICB9CgogIGlmKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyl7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgcnVuKTsKICB9ZWxzZXsKICAgIHJ1bigpOwogIH0KfSkoKTsKPC9zY3JpcHQ+[\/vc_raw_html][\/vc_column][\/vc_row][vc_row unlock_row_content=\u00a0\u00bbyes\u00a0\u00bb row_height_percent=\u00a0\u00bb0&Prime; override_padding=\u00a0\u00bbyes\u00a0\u00bb h_padding=\u00a0\u00bb5&Prime; top_padding=\u00a0\u00bb5&Prime; bottom_padding=\u00a0\u00bb5&Prime; [&hellip;]<\/p>\n","protected":false},"author":3,"featured_media":0,"parent":0,"menu_order":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_acf_changed":false,"iawp_total_views":36,"footnotes":"","_members_access_role":[],"_members_access_error":""},"class_list":["post-997","page","type-page","status-publish","hentry"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v28.4 - https:\/\/yoast.com\/product\/yoast-seo-wordpress\/ -->\n<title>Genre \/ Diversit\u00e9 \/ \u00c9quit\u00e9 - NumPEx<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/numpex.org\/fr\/genre-diversite-equite\/\" \/>\n<meta property=\"og:locale\" content=\"fr_FR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"Genre \/ Diversit\u00e9 \/ \u00c9quit\u00e9 - NumPEx\" \/>\n<meta property=\"og:description\" content=\"[vc_row row_height_percent=\u00a0\u00bb0&Prime; overlay_alpha=\u00a0\u00bb50&Prime; gutter_size=\u00a0\u00bb3&Prime; column_width_percent=\u00a0\u00bb100&Prime; shift_y=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; sticky=\u00a0\u00bbyes\u00a0\u00bb content_parallax=\u00a0\u00bb0&Prime; uncode_shortcode_id=\u00a0\u00bb165842&Prime; css=\u00a0\u00bb.vc_custom_1785924495010{margin-top: 1% !important;}\u00a0\u00bb][vc_column width=\u00a0\u00bb1\/1&Prime;][vc_raw_html]PCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBOdW1QRXgg4oCUIE1lbnUgZGUgc2VjdGlvbnMgc3RpY2t5IOKAlCB2LjYuNAogIE5hb3MgQWdlbmN5IMK3IDIwMjYtMDktMTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgoKPHN0eWxlPgogIDpyb290eyAtLW5weC10b3A6IDYwcHg7IH0gLyogaGF1dGV1ciBkdSBoZWFkZXIgVW5jb2RlIHN0aWNreSAqLwogIC5ucHgtc3VibmF2ewogICAgYmFja2dyb3VuZDogI0UwOTkwMDsgLyogb3JhbmdlIGQnYWNjZW50dWF0aW9uIE51bVBFeCAqLwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjA4KTsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHotaW5kZXg6IDQwOwogIH0KICAubnB4LXN1Ym5hdltoaWRkZW5deyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAubnB4LXN1Ym5hdi5ucHgtc3R1Y2t7IGJvcmRlci1yYWRpdXM6IDAgMCAxMnB4IDEycHg7IH0KICAubnB4LXN1Ym5hdi5ucHgtc3R1Y2t7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IHZhcigtLW5weC10b3ApOwogICAgbGVmdDogMDsgcmlnaHQ6IDA7CiAgfQogIC5ucHgtc3VibmF2X19pbm5lcnsKICAgIC8qIHYuNi40IDogbWV0cmlxdWVzIHBpbG90ZWVzIHBhciB2YXJpYWJsZXMuIExlcyB2YWxldXJzIGRlIHJlcGxpCiAgICAgICBTT05UIGNlbGxlcyBkZSBsYSB2LjYuMiA6IHNhbnMgSlMsIHJlbmR1IGlkZW50aXF1ZS4gKi8KICAgIG1heC13aWR0aDogMTE0MHB4OwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDAgdmFyKC0tbnB4LWdhcCwgMTBweCk7CiAgICBtaW4taGVpZ2h0OiA0NnB4OwogICAgcGFkZGluZy10b3A6IDZweDsKICAgIHBhZGRpbmctYm90dG9tOiA2cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZm9udC1zaXplOiB2YXIoLS1ucHgtZnMsIDExcHgpOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiB2YXIoLS1ucHgtbHMsIC4xMmVtKTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOwogICAgLyogZm9udC1mYW1pbHk6ICdQb3BwaW5zJywgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOyAqLwogIH0KICAubnB4LXN1Ym5hdl9faW5uZXI6Oi13ZWJraXQtc2Nyb2xsYmFyeyBkaXNwbGF5OiBub25lOyB9CiAgLyogU3DDqWNpZmljaXTDqSByZW5mb3Jjw6llICsgIWltcG9ydGFudCA6IG5ldXRyYWxpc2UgbGVzIGNvdWxldXJzIGRlIGxpZW5zIGR1IHRow6htZSBVbmNvZGUgKG9yYW5nZSBhdSBzdXJ2b2wvY2xpYykgKi8KICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYSwKICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYTp2aXNpdGVkewogICAgY29sb3I6IHJnYmEoMjU1LDI1MCwyNDMsLjg4KSAhaW1wb3J0YW50OyAvKiBibGFuYyBjYXNzw6kgKi8KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogOHB4IHZhcigtLW5weC1weCwgMTRweCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIHRyYW5zaXRpb246IGNvbG9yIC4xOHMsIGJhY2tncm91bmQtY29sb3IgLjE4czsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7ICAvKiB2LjYuNCA6IHVuIGxpYmVsbGUgbmUgc2UgY291cGUgamFtYWlzICovCiAgICBmbGV4OiAwIDAgYXV0bzsgICAgICAgLyogdi42LjQgOiBsZXMgcGFzdGlsbGVzIG5lIHNlIGNvbXByaW1lbnQgcGFzICovCiAgfQogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmhvdmVyLAogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmZvY3VzLAogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmFjdGl2ZXsKICAgIGNvbG9yOiAjRkZGRkZGICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLC4xMik7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9CiAgbmF2Lm5weC1zdWJuYXYgLm5weC1zdWJuYXZfX2lubmVyIGEubnB4LWFjdGl2ZSwKICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYS5ucHgtYWN0aXZlOmhvdmVyewogICAgY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICNBODZGMDA7IC8qIG9yYW5nZSBmb25jw6ksIGFwbGF0IHNpbXBsZSAqLwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICB9Cjwvc3R5bGU+Cgo8bmF2IGNsYXNzPSJucHgtc3VibmF2IiBhcmlhLWxhYmVsPSJQYWdlIHNlY3Rpb25zIiBoaWRkZW4+CiAgPGRpdiBjbGFzcz0ibnB4LXN1Ym5hdl9faW5uZXIiPjwvZGl2Pgo8L25hdj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpewogICd1c2Ugc3RyaWN0JzsKCiAgLyogPT09PT09PT09PT09PT09PT09PT0gQ09ORklHIFNJVEUgPT09PT09PT09PT09PT09PT09PT0KICAgICBTZXVsZSB6b25lIMOgIGFkYXB0ZXIgcG91ciByw6l1dGlsaXNlciBsZSBibG9jIGFpbGxldXJzLiAqLwogIHZhciBQUkVGSVggPSAnbmF2LSc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByw6lmaXhlIGRlcyBSb3cgSUQgw6AgZMOpdGVjdGVyICovCiAgdmFyIFNUUklQICA9IFsvLShlbnxmcikkL2ksIC8tZXhhLVthLXowLTldKyQvaV07ICAgLyogc3VmZml4ZXMgZCd1bmljaXTDqSDDoCBpZ25vcmVyICAqLwoKICAvKiBSZXBsaSBwb3VyIGxlcyBwYWdlcyBQQVMgRU5DT1JFIE1JR1LDiUVTIHZlcnMgbGUgcHLDqWZpeGUgbmF2LQogICAgICh0eXBpcXVlbWVudCBsZXMgdHJhZHVjdGlvbnMgV1BNTCBkb250IGxlcyBSb3cgSUQgbidvbnQgcGFzIMOpdMOpCiAgICAgcmVub21tw6lzKS4gVXRpbGlzw6kgVU5JUVVFTUVOVCBzaSBsYSBwYWdlIG5lIGNvbnRpZW50IGF1Y3VuZSByb3cKICAgICDCqyBuYXYtIMK7LiBSZXByZW5kIGxlcyBjbMOpcyBkZSBsYSB2LjUgOiB1bmUgcm93IG5vbW3DqWUKICAgICDCqyBjb25zb3J0aXVtLWV4YS1tYS1lbiDCuyBvdSBzaW1wbGVtZW50IMKrIGNvbnNvcnRpdW0gwrsgZXN0CiAgICAgcmV0cm91dsOpZS4gTGlzdGUgZmVybcOpZSA9IGF1Y3VuIHJpc3F1ZSBkZSBmYXV4IHBvc2l0aWYuICovCiAgdmFyIExFR0FDWV9LRVlTID0gWwogICAgJ292ZXJ2aWV3JywgJ2NvbnNvcnRpdW0nLCAncmVzdWx0cycsICdtZXRyaWNzJywgJ3NvZnR3YXJlJywKICAgICduZXdzJywgJ2V2ZW50cycsICdhZ2VuZGEnLCAndGVhbScsICdjb250YWN0JwogIF07CgogIHZhciBMQUJFTFMgPSB7CiAgICAvKiBMaWJlbGzDqXMgcHLDqWbDqXLDqXMgcGFyIGNsw6kuIFRvdXRlIGNsw6kgYWJzZW50ZSBlc3QgYWZmaWNow6llCiAgICAgICBjYXBpdGFsaXPDqWUgdGVsbGUgcXVlbGxlIChuYXYtam9pbi11cyAtPiDCqyBKb2luIFVzIMK7KS4gKi8KICAgIGVuOiB7CiAgICAgICdjb25zb3J0aXVtJzogJ0NvbnNvcnRpdW0gJiBXb3JrcGFja2FnZXMnLAogICAgICAncmVzdWx0cyc6ICAgICdSZXN1bHRzICYgSW1wYWN0JywKICAgICAgJ21ldHJpY3MnOiAgICAnUHJvamVjdCBNZXRyaWNzJywKICAgICAgJ3RlYW0nOiAgICAgICAnVGhlIFRlYW0nCiAgICB9LAogICAgZnI6IHsKICAgICAgJ292ZXJ2aWV3JzogICAnUHLDqXNlbnRhdGlvbicsCiAgICAgICdjb25zb3J0aXVtJzogJ0NvbnNvcnRpdW0gZXQgbG90cyBkZSB0cmF2YWlsJywKICAgICAgJ3Jlc3VsdHMnOiAgICAnUsOpc3VsdGF0cyBldCBpbXBhY3QnLAogICAgICAnbWV0cmljcyc6ICAgICdDaGlmZnJlcyBjbMOpcycsCiAgICAgICdzb2Z0d2FyZSc6ICAgJ0xvZ2ljaWVscycsCiAgICAgICduZXdzJzogICAgICAgJ0FjdHVhbGl0w6lzJywKICAgICAgJ2V2ZW50cyc6ICAgICAnw4l2w6huZW1lbnRzJywKICAgICAgJ3RlYW0nOiAgICAgICAnTOKAmcOpcXVpcGUnCiAgICB9CiAgfTsKICB2YXIgU1RJQ0tfTU9ERSA9ICd1bmNvZGUnOyAvKiAndW5jb2RlJyA9IGxhIHJvdyBnw6hyZSBsZSBzdGlja3kgwrcgJ2pzJyA9IGxlIHNjcmlwdCBjb2xsZSBsdWktbcOqbWUgKi8KICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKICB2YXIgREVCVUcgPSAvWz8mXW5weGRlYnVnPTEvLnRlc3Qod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgZnVuY3Rpb24gbG9nKCl7CiAgICBpZighREVCVUcgfHwgIXdpbmRvdy5jb25zb2xlIHx8ICFjb25zb2xlLmxvZykgcmV0dXJuOwogICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgWydbbnB4LXN1Ym5hdl0nXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CiAgfQoKICAvKiAtLS0tIExhbmd1ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgPGh0bWwgbGFuZz4gcG9zw6kgcGFyIFdQTUwuIFJlcGxpcyBzdWNjZXNzaWZzIHNpIGwnYXR0cmlidXQgbWFucXVlIDoKICAgICB1biBhbmPDqnRyZSBwb3J0ZXVyIGRlIGxhbmcsIHB1aXMgbGVzIGNsYXNzZXMgZHUgYm9keS4gKi8KICBmdW5jdGlvbiBkZXRlY3RMYW5nKGVsKXsKICAgIHZhciB0YWcgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYW5nJykgfHwgJyc7CiAgICBpZighdGFnICYmIGVsICYmIGVsLmNsb3Nlc3QpewogICAgICB2YXIgaG9zdCA9IGVsLmNsb3Nlc3QoJ1tsYW5nXScpOwogICAgICBpZihob3N0KXsgdGFnID0gaG9zdC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKSB8fCAnJzsgfQogICAgfQogICAgaWYoIXRhZyl7CiAgICAgIHZhciBjbHMgPSAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSkgfHwgJyc7CiAgICAgIGlmKC8oPzpsYW5nfGxhbmd1YWdlKS1mclxifGZyW18tXUZSL2kudGVzdChjbHMpKXsgdGFnID0gJ2ZyJzsgfQogICAgfQogICAgcmV0dXJuIC9eZnIvaS50ZXN0KHRhZykgPyAnZnInIDogJ2VuJzsKICB9CgogIGZ1bmN0aW9uIGtleU9mKGlkKXsKICAgIHZhciBrID0gaWQuc2xpY2UoUFJFRklYLmxlbmd0aCkudG9Mb3dlckNhc2UoKTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBTVFJJUC5sZW5ndGg7IGkrKyl7IGsgPSBrLnJlcGxhY2UoU1RSSVBbaV0sICcnKTsgfQogICAgcmV0dXJuIGs7CiAgfQogIGZ1bmN0aW9uIHRpdGxlQ2FzZShrZXkpewogICAgcmV0dXJuIGtleS5zcGxpdCgnLScpLm1hcChmdW5jdGlvbih3KXsKICAgICAgcmV0dXJuIHcgPyB3LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdy5zbGljZSgxKSA6IHc7CiAgICB9KS5qb2luKCcgJyk7CiAgfQoKICAvKiBEb3VibGUgc8OpY3VyaXTDqSA6IMOpY2FydGUgbGVzIG1lbnVzIGfDqW7DqXLDqXMgcGFyIFdvcmRQcmVzcyBldCB0b3V0IGNlCiAgICAgcXVpIHZpdCBkYW5zIGxhIG5hdmlnYXRpb24gb3UgbGUgaGVhZGVyIOKAlCBpbmNoYW5nw6kgZGVwdWlzIGxhIHYuNi4xLiAqLwogIGZ1bmN0aW9uIGlzU2VjdGlvbkNhbmRpZGF0ZShlbCl7CiAgICB2YXIgdGFnID0gZWwudGFnTmFtZTsKICAgIGlmKHRhZyA9PT0gJ1VMJyB8fCB0YWcgPT09ICdMSScgfHwgdGFnID09PSAnQScgfHwgdGFnID09PSAnTkFWJyl7IHJldHVybiBmYWxzZTsgfQogICAgaWYoZWwuY2xvc2VzdCAmJiBlbC5jbG9zZXN0KCduYXYsIGhlYWRlciwgLm5weC1zdWJuYXYnKSl7IHJldHVybiBmYWxzZTsgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBpbkRvY3VtZW50T3JkZXIoYSwgYil7CiAgICB2YXIgcG9zID0gYS5zZWN0aW9uLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIuc2VjdGlvbik7CiAgICByZXR1cm4gKHBvcyAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSA\/IC0xIDogMTsKICB9CgogIC8qIC0tLS0gRMOpY291dmVydGUgZGVzIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgMSkgTW9kZSBub21pbmFsIDogdG91dGVzIGxlcyByb3dzIGRvbnQgbCdpZCBjb21tZW5jZSBwYXIgwqsgbmF2LSDCuy4KICAgICAyKSBSZXBsaSA6IHNpIGV0IHNldWxlbWVudCBzaSBsZSBtb2RlIDEgbmUgZG9ubmUgUklFTiwgb24gY2hlcmNoZQogICAgICAgIGxlcyBjbMOpcyBow6lyaXTDqWVzIGRlIGxhIHYuNSwgYXZlYyBvdSBzYW5zIHN1ZmZpeGUuCiAgICAgUmVudm9pZSB7IGVudHJpZXM6IFsuLi5dLCBtb2RlOiAncHJlZml4JyB8ICdsZWdhY3knIHwgJ25vbmUnIH0uICovCiAgZnVuY3Rpb24gZGlzY292ZXIoZGljdCl7CiAgICB2YXIgc2VlbiA9IE9iamVjdC5jcmVhdGUobnVsbCksIGVudHJpZXMgPSBbXTsKCiAgICBmdW5jdGlvbiBwdXNoKGVsLCBrZXkpewogICAgICBpZighZWwgfHwgIWtleSB8fCBzZWVuW2tleV0peyByZXR1cm47IH0KICAgICAgc2VlbltrZXldID0gdHJ1ZTsKICAgICAgZW50cmllcy5wdXNoKHsgc2VjdGlvbjogZWwsIGtleToga2V5LCBsYWJlbDogZGljdFtrZXldIHx8IHRpdGxlQ2FzZShrZXkpIH0pOwogICAgfQoKICAgIHZhciBmb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49IicgKyBQUkVGSVggKyAnIl0nKTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBmb3VuZC5sZW5ndGg7IGkrKyl7CiAgICAgIGlmKCFpc1NlY3Rpb25DYW5kaWRhdGUoZm91bmRbaV0pKXsgY29udGludWU7IH0KICAgICAgcHVzaChmb3VuZFtpXSwga2V5T2YoZm91bmRbaV0uaWQpKTsKICAgIH0KICAgIGlmKGVudHJpZXMubGVuZ3RoKXsKICAgICAgd2FybklmUGFydGlhbGx5TWlncmF0ZWQoc2Vlbik7CiAgICAgIHJldHVybiB7IGVudHJpZXM6IGVudHJpZXMsIG1vZGU6ICdwcmVmaXgnIH07CiAgICB9CgogICAgZm9yKHZhciBqID0gMDsgaiA8IExFR0FDWV9LRVlTLmxlbmd0aDsgaisrKXsKICAgICAgdmFyIGsgID0gTEVHQUNZX0tFWVNbal07CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGspIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZF49IicgKyBrICsgJy0iXScpOwogICAgICBpZihlbCAmJiBpc1NlY3Rpb25DYW5kaWRhdGUoZWwpKXsgcHVzaChlbCwgayk7IH0KICAgIH0KICAgIGlmKGVudHJpZXMubGVuZ3RoKXsKICAgICAgZW50cmllcy5zb3J0KGluRG9jdW1lbnRPcmRlcik7IC8qIGxhIGxpc3RlIGRlcyBjbMOpcyBuZSBzdWl0IHBhcyBsJ29yZHJlIGRlIGxhIHBhZ2UgKi8KICAgICAgcmV0dXJuIHsgZW50cmllczogZW50cmllcywgbW9kZTogJ2xlZ2FjeScgfTsKICAgIH0KCiAgICByZXR1cm4geyBlbnRyaWVzOiBlbnRyaWVzLCBtb2RlOiAnbm9uZScgfTsKICB9CgogIC8qIC0tLS0gTWlncmF0aW9uIHBhcnRpZWxsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIENhcyBwacOoZ2UgOiBzdXIgdW5lIG3Dqm1lIHBhZ2UgY2VydGFpbmVzIHJvd3Mgb250IMOpdMOpIHJlbm9tbcOpZXMgZW4KICAgICBuYXYt4oCmIGV0IGQnYXV0cmVzIG5vbi4gTGUgbW9kZSBub21pbmFsIGwnZW1wb3J0ZSBldCBsZXMgcm93cyBub24KICAgICByZW5vbW3DqWVzIGRpc3BhcmFpc3NlbnQgU0lMRU5DSUVVU0VNRU5UIGR1IG1lbnUuIE9uIGxlIHNpZ25hbGUuICovCiAgZnVuY3Rpb24gd2FybklmUGFydGlhbGx5TWlncmF0ZWQoc2Vlbil7CiAgICBpZighd2luZG93LmNvbnNvbGUgfHwgIWNvbnNvbGUud2Fybil7IHJldHVybjsgfQogICAgdmFyIHN0cmFnZ2xlcnMgPSBbXTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBMRUdBQ1lfS0VZUy5sZW5ndGg7IGkrKyl7CiAgICAgIHZhciBrID0gTEVHQUNZX0tFWVNbaV07CiAgICAgIGlmKHNlZW5ba10peyBjb250aW51ZTsgfSAvKiBkw6lqw6AgcHLDqXNlbnQgdmlhIHVuZSByb3cgbmF2LSAqLwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWRePSInICsgayArICctIl0nKTsKICAgICAgaWYoZWwgJiYgaXNTZWN0aW9uQ2FuZGlkYXRlKGVsKSl7IHN0cmFnZ2xlcnMucHVzaChrICsgJyAoIycgKyBlbC5pZCArICcpJyk7IH0KICAgIH0KICAgIGlmKCFzdHJhZ2dsZXJzLmxlbmd0aCl7IHJldHVybjsgfQogICAgY29uc29sZS53YXJuKAogICAgICAnW25weC1zdWJuYXZdIE1pZ3JhdGlvbiBpbmNvbXBsZXRlIHN1ciBjZXR0ZSBwYWdlIDogJyArIHN0cmFnZ2xlcnMubGVuZ3RoICsKICAgICAgJyByb3cocykgcG9ydGVudCBlbmNvcmUgdW4gYW5jaWVuIFJvdyBJRCBldCBzb250IEFCU0VOVEVTIGR1IG1lbnUgLT4gJyArCiAgICAgIHN0cmFnZ2xlcnMuam9pbignLCAnKSArICdcbicgKwogICAgICAnTGVzIHJlbm9tbWVyIGF2ZWMgbGUgcHJlZml4ZSAiJyArIFBSRUZJWCArICciIChleC4gJyArIFBSRUZJWCArIExFR0FDWV9LRVlTWzBdICsgJykuJwogICAgKTsKICB9CgogIC8qIC0tLS0gTWVzc2FnZSBkZSBkaWFnbm9zdGljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIEludmlzaWJsZSBwb3VyIGxlcyB2aXNpdGV1cnMsIGTDqWNpc2lmIHBvdXIgbGEgcGVyc29ubmUgcXVpIHJlcHJlbmQKICAgICBsZSBkb3NzaWVyIDogb24gZGl0IGNlIHF1aSBhIMOpdMOpIGNoZXJjaMOpIGV0IGNlIHF1aSBhIMOpdMOpIHRyb3V2w6kuICovCiAgZnVuY3Rpb24gd2Fybk5vdGhpbmdGb3VuZCgpewogICAgaWYoIXdpbmRvdy5jb25zb2xlIHx8ICFjb25zb2xlLndhcm4peyByZXR1cm47IH0KICAgIHZhciB3aXRoSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRdJyk7CiAgICBjb25zb2xlLndhcm4oCiAgICAgICdbbnB4LXN1Ym5hdl0gQXVjdW5lIHNlY3Rpb24gdHJvdXbDqWUgOiBsYSBiYXJyZSByZXN0ZSBtYXNxdcOpZS5cbicgKwogICAgICAnLSBSZWNoZXJjaMOpIGVuIHByaW9yaXTDqSA6IGRlcyBSb3cgSUQgY29tbWVuw6dhbnQgcGFyICInICsgUFJFRklYICsgJyIgKGV4LiBuYXYtb3ZlcnZpZXcpLlxuJyArCiAgICAgICctIFB1aXMsIGVuIHJlcGxpLCBsZXMgY2xlcyBoZXJpdGVlcyA6ICcgKyBMRUdBQ1lfS0VZUy5qb2luKCcsICcpICsgJy5cbicgKwogICAgICAnLSBQYWdlIGxhbmc9IicgKyAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnbGFuZycpIHx8ICcoYWJzZW50KScpICsgJyIsICcgKwogICAgICB3aXRoSWQubGVuZ3RoICsgJyBlbGVtZW50KHMpIHBvcnRlbnQgdW4gaWQuXG4nICsKICAgICAgJy0gQ2F1c2UgbGEgcGx1cyBmcmVxdWVudGUgOiBsZXMgUm93IElEIGRlIENFVFRFIHBhZ2UgbmUgc29udCBwYXMgbm9tbWVzLiAnICsKICAgICAgJ1NvdXMgV1BNTCB1bmUgdHJhZHVjdGlvbiBlc3QgdW4gcG9zdCBkaXN0aW5jdCDigJQgcmVub21tZXIgbGVzIFJvdyBJRCBkZSBsYSBwYWdlICcgKwogICAgICAnc291cmNlIG5lIHJlbm9tbWUgcGFzIGNldXggZGUgbGEgdHJhZHVjdGlvbiA6IGlsIGZhdXQgbGVzIHNhaXNpciBzdXIgY2hhcXVlIGxhbmd1ZS5cbicgKwogICAgICAnLSBQb3VyIGxhIGxpc3RlIGRlcyBpZHMgcHJlc2VudHMsIHJlY2hhcmdlciBsYSBwYWdlIGF2ZWMgP25weGRlYnVnPTEnCiAgICApOwogICAgaWYoREVCVUcpewogICAgICB2YXIgaWRzID0gW107CiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB3aXRoSWQubGVuZ3RoOyBpKyspeyBpZHMucHVzaCh3aXRoSWRbaV0uaWQpOyB9CiAgICAgIGNvbnNvbGUud2FybignW25weC1zdWJuYXZdIGlkcyBwcmVzZW50cyBzdXIgbGEgcGFnZSA6JywgaWRzKTsKICAgIH0KICB9CgogIC8qIC0tLS0gSW5pdGlhbGlzYXRpb24gZCd1bmUgaW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICBSZW52b2llIHRydWUgc2kgbGEgYmFycmUgYSDDqXTDqSBjb25zdHJ1aXRlLCBmYWxzZSBzJ2lsIG4neSBhdmFpdAogICAgIGF1Y3VuZSBzZWN0aW9uIChsJ2luc3RhbmNlIHJlc3RlIGFsb3JzIMOpbGlnaWJsZSDDoCB1bmUgbm91dmVsbGUKICAgICB0ZW50YXRpdmUgOiBkYXRhLW5weC1yZWFkeSBuJ2VzdCBwb3PDqSBxdSdlbiBjYXMgZGUgc3VjY8OocykuICovCiAgZnVuY3Rpb24gaW5pdChuYXYpewogICAgdmFyIGlubmVyID0gbmF2LnF1ZXJ5U2VsZWN0b3IoJy5ucHgtc3VibmF2X19pbm5lcicpOwogICAgaWYoIWlubmVyKXsKICAgICAgbmF2LnNldEF0dHJpYnV0ZSgnZGF0YS1ucHgtcmVhZHknLCAnMScpOyAvKiBiYWxpc2FnZSBpbmF0dGVuZHUgOiBuZSBwYXMgYm91Y2xlciBkZXNzdXMgKi8KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgdmFyIGxhbmcgID0gZGV0ZWN0TGFuZyhuYXYpOwogICAgdmFyIGRpY3QgID0gTEFCRUxTW2xhbmddIHx8IHt9OwogICAgdmFyIGZvdW5kID0gZGlzY292ZXIoZGljdCk7CiAgICB2YXIgZW50cmllcyA9IGZvdW5kLmVudHJpZXM7CgogICAgaWYoIWVudHJpZXMubGVuZ3RoKXsgcmV0dXJuIGZhbHNlOyB9CgogICAgbmF2LnNldEF0dHJpYnV0ZSgnZGF0YS1ucHgtcmVhZHknLCAnMScpOwogICAgbG9nKCdtb2RlID0nLCBmb3VuZC5tb2RlLCAnfCBsYW5nID0nLCBsYW5nLCAnfCBlbnRyZWVzID0nLCBlbnRyaWVzLm1hcChmdW5jdGlvbihlKXsKICAgICAgcmV0dXJuIGUua2V5ICsgJyAtPiAnICsgZS5sYWJlbCArICcgKCMnICsgZS5zZWN0aW9uLmlkICsgJyknOwogICAgfSkpOwoKICAgIGlubmVyLmlubmVySFRNTCA9ICcnOwogICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgYS5ocmVmID0gJyMnICsgZS5zZWN0aW9uLmlkOwogICAgICBhLnRleHRDb250ZW50ID0gZS5sYWJlbDsKICAgICAgaW5uZXIuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIGUubGluayA9IGE7CiAgICB9KTsKICAgIG5hdi5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwoKICAgIC8qIC0tLS0gdi42LjQgOiBsYSBiYXJyZSB0aWVudCBzdXIgdW5lIGxpZ25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgZmxleC13cmFwOm5vd3JhcCBzdXBwcmltZSBsYSAyZSBsaWduZS4gT24gbWVzdXJlIGV0IG9uIHJldGllbnQgbGUKICAgICAgIFBSRU1JRVIgcGFsaWVyIHF1aSByZW50cmUuIExlIHBhbGllciAwIGVzdCBsZSByZW5kdSB2LjYuMiA6IHVuZQogICAgICAgYmFycmUgcXVpIHJlbnRyYWl0IGRlamEgbmUgYm91Z2UgcGFzIGQndW4gcGl4ZWwuIFNpIG1lbWUgbGUKICAgICAgIHBsYW5jaGVyIGRlYm9yZGUgKHRlbGVwaG9uZSksIGxhIGJhcnJlIGRlZmlsZSBob3Jpem9udGFsZW1lbnQuCiAgICAgICBUb3V0IGVzdCBlbnZlbG9wcGUgOiBlbiBjYXMgZCdlcnJldXIgb24gcmV2aWVudCBhdSBwYWxpZXIgMC4gKi8KICAgIHZhciBTVEVQUyA9IFsKICAgICAgeyBmczogJzExcHgnLCAgIGxzOiAnLjEyZW0nLCBweDogJzE0cHgnLCBnYXA6ICcxMHB4JyB9LCAvKiByZW5kdSB2LjYuMiAqLwogICAgICB7IGZzOiAnMTFweCcsICAgbHM6ICcuMDllbScsIHB4OiAnMTNweCcsIGdhcDogJzlweCcgIH0sCiAgICAgIHsgZnM6ICcxMC41cHgnLCBsczogJy4wN2VtJywgcHg6ICcxMnB4JywgZ2FwOiAnOHB4JyAgfSwKICAgICAgeyBmczogJzEwcHgnLCAgIGxzOiAnLjA2ZW0nLCBweDogJzExcHgnLCBnYXA6ICc3cHgnICB9LAogICAgICB7IGZzOiAnOS41cHgnLCAgbHM6ICcuMDVlbScsIHB4OiAnMTBweCcsIGdhcDogJzZweCcgIH0sCiAgICAgIHsgZnM6ICc5cHgnLCAgICBsczogJy4wNGVtJywgcHg6ICc5cHgnLCAgZ2FwOiAnNXB4JyAgfSAgLyogcGxhbmNoZXIgKi8KICAgIF07CiAgICBmdW5jdGlvbiBhcHBseVN0ZXAocyl7CiAgICAgIHZhciBzdCA9IGlubmVyLnN0eWxlOwogICAgICBzdC5zZXRQcm9wZXJ0eSgnLS1ucHgtZnMnLCAgcy5mcyk7CiAgICAgIHN0LnNldFByb3BlcnR5KCctLW5weC1scycsICBzLmxzKTsKICAgICAgc3Quc2V0UHJvcGVydHkoJy0tbnB4LXB4JywgIHMucHgpOwogICAgICBzdC5zZXRQcm9wZXJ0eSgnLS1ucHgtZ2FwJywgcy5nYXApOwogICAgfQogICAgZnVuY3Rpb24gb3ZlcmZsb3dpbmcoKXsgcmV0dXJuIGlubmVyLnNjcm9sbFdpZHRoID4gaW5uZXIuY2xpZW50V2lkdGggKyAxOyB9CgogICAgdmFyIGZpdHRpbmcgPSBmYWxzZSwgbGFzdFcgPSAtMTsKICAgIGZ1bmN0aW9uIGZpdCgpewogICAgICBpZihmaXR0aW5nKXsgcmV0dXJuOyB9CiAgICAgIGZpdHRpbmcgPSB0cnVlOwogICAgICB0cnl7CiAgICAgICAgLyogQmFycmUgbm9uIG1lc3VyYWJsZSAobWFzcXVlZSwgb25nbGV0IHJlcGxpZSkgOiBuZSByaWVuIGNvbmNsdXJlLiAqLwogICAgICAgIGlmKGlubmVyLmNsaWVudFdpZHRoID4gNDApewogICAgICAgICAgdmFyIGksIGNob3NlbiA9IFNURVBTLmxlbmd0aCAtIDE7CiAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBTVEVQUy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgIGFwcGx5U3RlcChTVEVQU1tpXSk7CiAgICAgICAgICAgIGlmKCFvdmVyZmxvd2luZygpKXsgY2hvc2VuID0gaTsgYnJlYWs7IH0KICAgICAgICAgIH0KICAgICAgICAgIGlmKGNob3NlbiAhPT0gaSl7IGFwcGx5U3RlcChTVEVQU1tjaG9zZW5dKTsgfQogICAgICAgICAgbGFzdFcgPSBuYXYuY2xpZW50V2lkdGg7CiAgICAgICAgfQogICAgICB9Y2F0Y2goZXJyKXsKICAgICAgICBhcHBseVN0ZXAoU1RFUFNbMF0pOyAgLyogamFtYWlzIGRlIGJhcnJlIGNhc3NlZSAqLwogICAgICB9CiAgICAgIGZpdHRpbmcgPSBmYWxzZTsKICAgIH0KICAgIGZpdCgpOwoKICAgIC8qIExhIHBvbGljZSBkdSB0aGVtZSBhcnJpdmUgZW4gYXN5bmNocm9uZSA6IHJlbWVzdXJlciBhIHNvbiBhcnJpdmVlLiAqLwogICAgaWYoZG9jdW1lbnQuZm9udHMgJiYgZG9jdW1lbnQuZm9udHMucmVhZHkgJiYgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbil7CiAgICAgIHRyeXsgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihmaXQsIGZpdCk7IH1jYXRjaChlcnIpe30KICAgIH0KICAgIHNldFRpbWVvdXQoZml0LCA2MDApOwogICAgc2V0VGltZW91dChmaXQsIDIwMDApOwoKICAgIC8qIExlIHBhc3NhZ2UgZW4gc3RpY2t5IGNoYW5nZSBsYSBsYXJnZXVyIHNhbnMgZXZlbmVtZW50IHJlc2l6ZS4gKi8KICAgIGlmKHdpbmRvdy5SZXNpemVPYnNlcnZlcil7CiAgICAgIHRyeXsKICAgICAgICBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24oKXsKICAgICAgICAgIGlmKG5hdi5jbGllbnRXaWR0aCAhPT0gbGFzdFcpeyBmaXQoKTsgfQogICAgICAgIH0pLm9ic2VydmUobmF2KTsKICAgICAgfWNhdGNoKGVycil7fQogICAgfQoKICAgIC8qIEVuIG1vZGUgZGVmaWxlbWVudCwgZ2FyZGVyIGxhIHBhc3RpbGxlIGFjdGl2ZSB2aXNpYmxlLiAqLwogICAgZnVuY3Rpb24gcmV2ZWFsKGxpbmspewogICAgICBpZighbGluayB8fCAhb3ZlcmZsb3dpbmcoKSl7IHJldHVybjsgfQogICAgICB2YXIgbCA9IGxpbmsub2Zmc2V0TGVmdCwgciA9IGwgKyBsaW5rLm9mZnNldFdpZHRoOwogICAgICB2YXIgdnMgPSBpbm5lci5zY3JvbGxMZWZ0LCB2ZSA9IHZzICsgaW5uZXIuY2xpZW50V2lkdGg7CiAgICAgIGlmKGwgPCB2cyl7IGlubmVyLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBsIC0gMTIpOyB9CiAgICAgIGVsc2UgaWYociA+IHZlKXsgaW5uZXIuc2Nyb2xsTGVmdCA9IHIgLSBpbm5lci5jbGllbnRXaWR0aCArIDEyOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9wT2Zmc2V0KCl7CiAgICAgIHZhciB2ID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0tbnB4LXRvcCcpOwogICAgICByZXR1cm4gcGFyc2VJbnQodiwgMTApIHx8IDA7CiAgICB9CiAgICAvKiBEw6lmaWxlbWVudCBhdmVjIGNvbXBlbnNhdGlvbiBkZXMgZGV1eCBtZW51cy4gKi8KICAgIGZ1bmN0aW9uIHRvdGFsT2Zmc2V0KCl7IHJldHVybiB0b3BPZmZzZXQoKSArIG5hdi5vZmZzZXRIZWlnaHQgKyA4OyB9CgogICAgLyogLS0tLSBDb2xsYWdlIDogZml4ZWQgKyBwbGFjZWhvbGRlciBhbnRpLXNhdXQgKG1vZGUgJ2pzJykgLS0tLSAqLwogICAgdmFyIHBoID0gbnVsbDsKICAgIGlmKFNUSUNLX01PREUgPT09ICdqcycpewogICAgICBwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwaC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBuYXYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocGgsIG5hdik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGljaygpewogICAgICBpZighcGgpeyByZXR1cm47IH0KICAgICAgdmFyIGFuY2hvciA9IChwaC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpID8gbmF2IDogcGg7CiAgICAgIHZhciBzaG91bGQgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIDw9IHRvcE9mZnNldCgpOwogICAgICBpZihzaG91bGQgJiYgIW5hdi5jbGFzc0xpc3QuY29udGFpbnMoJ25weC1zdHVjaycpKXsKICAgICAgICBwaC5zdHlsZS5oZWlnaHQgID0gbmF2Lm9mZnNldEhlaWdodCArICdweCc7CiAgICAgICAgcGguc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgbmF2LmNsYXNzTGlzdC5hZGQoJ25weC1zdHVjaycpOwogICAgICB9ZWxzZSBpZighc2hvdWxkICYmIG5hdi5jbGFzc0xpc3QuY29udGFpbnMoJ25weC1zdHVjaycpKXsKICAgICAgICBuYXYuY2xhc3NMaXN0LnJlbW92ZSgnbnB4LXN0dWNrJyk7CiAgICAgICAgcGguc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgfQoKICAgIC8qIC0tLS0gU2VjdGlvbiBhY3RpdmUgLS0tLSAqLwogICAgdmFyIGxhc3RDdXJyZW50ID0gbnVsbDsKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodCgpewogICAgICB2YXIgbGltaXQgPSB0b3RhbE9mZnNldCgpICsgNDsKICAgICAgdmFyIGN1cnJlbnQgPSBudWxsOwogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgaWYoZS5zZWN0aW9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8PSBsaW1pdCl7IGN1cnJlbnQgPSBlOyB9CiAgICAgIH0pOwogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgZS5saW5rLmNsYXNzTGlzdC50b2dnbGUoJ25weC1hY3RpdmUnLCBlID09PSBjdXJyZW50KTsKICAgICAgfSk7CiAgICAgIGlmKGN1cnJlbnQgIT09IGxhc3RDdXJyZW50KXsKICAgICAgICBsYXN0Q3VycmVudCA9IGN1cnJlbnQ7CiAgICAgICAgaWYoY3VycmVudCl7IHJldmVhbChjdXJyZW50LmxpbmspOyB9CiAgICAgIH0KICAgIH0KCiAgICAvKiAtLS0tIENsaWMgc3VyIHVuZSBlbnRyw6llIC0tLS0gKi8KICAgIHZhciBzbW9vdGggPSAhd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlczsKICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgZS5saW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXYpewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdmFyIHkgPSBlLnNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0IC0gdG90YWxPZmZzZXQoKTsKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHksIGJlaGF2aW9yOiBzbW9vdGggPyAnc21vb3RoJyA6ICdhdXRvJyB9KTsKICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgJyMnICsgZS5zZWN0aW9uLmlkKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBmdW5jdGlvbiBvblNjcm9sbCgpeyBzdGljaygpOyBoaWdobGlnaHQoKTsgfQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24oKXsgZml0KCk7IG9uU2Nyb2xsKCk7IH0pOwogICAgb25TY3JvbGwoKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLyogLS0tLSBBbW9yw6dhZ2UgOiB0b3V0ZXMgbGVzIGluc3RhbmNlcywgYXZlYyBxdWVscXVlcyByZWxhbmNlcyAtLS0tLS0KICAgICBMZXMgcm93cyBVbmNvZGUgcGV1dmVudCDDqnRyZSBpbmplY3TDqWVzIGFwcsOocyBsZSBET01Db250ZW50TG9hZGVkCiAgICAgKGxhenkgLyBBSkFYKSA6IG9uIHJldGVudGUgcGVuZGFudCB+Miw1IHMgYXZhbnQgZGUgY29uY2x1cmUuICovCiAgZnVuY3Rpb24gYm9vdCgpewogICAgdmFyIG5hdnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubnB4LXN1Ym5hdjpub3QoW2RhdGEtbnB4LXJlYWR5XSknKTsKICAgIHZhciBwZW5kaW5nID0gMDsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuYXZzLmxlbmd0aDsgaSsrKXsKICAgICAgaWYoIWluaXQobmF2c1tpXSkpeyBwZW5kaW5nKys7IH0KICAgIH0KICAgIHJldHVybiBwZW5kaW5nOwogIH0KCiAgZnVuY3Rpb24gcnVuKCl7CiAgICBpZihib290KCkgPT09IDApeyByZXR1cm47IH0KICAgIHZhciB0cmllcyA9IDA7CiAgICB2YXIgdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICB0cmllcysrOwogICAgICB2YXIgbGFzdCA9IHRyaWVzID49IDY7IC8qIDYgeCA0MDAgbXMgKi8KICAgICAgaWYoYm9vdCgpID09PSAwIHx8IGxhc3QpewogICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICAgIGlmKGxhc3QgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5weC1zdWJuYXY6bm90KFtkYXRhLW5weC1yZWFkeV0pJykpewogICAgICAgICAgd2Fybk5vdGhpbmdGb3VuZCgpOwogICAgICAgIH0KICAgICAgfQogICAgfSwgNDAwKTsKICB9CgogIGlmKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyl7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgcnVuKTsKICB9ZWxzZXsKICAgIHJ1bigpOwogIH0KfSkoKTsKPC9zY3JpcHQ+[\/vc_raw_html][\/vc_column][\/vc_row][vc_row unlock_row_content=\u00a0\u00bbyes\u00a0\u00bb row_height_percent=\u00a0\u00bb0&Prime; override_padding=\u00a0\u00bbyes\u00a0\u00bb h_padding=\u00a0\u00bb5&Prime; top_padding=\u00a0\u00bb5&Prime; bottom_padding=\u00a0\u00bb5&Prime; [&hellip;]\" \/>\n<meta property=\"og:url\" content=\"https:\/\/numpex.org\/fr\/genre-diversite-equite\/\" \/>\n<meta property=\"og:site_name\" content=\"NumPEx\" \/>\n<meta property=\"article:modified_time\" content=\"2026-09-10T20:37:23+00:00\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Dur\u00e9e de lecture estim\u00e9e\" \/>\n\t<meta name=\"twitter:data1\" content=\"19 minutes\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\\\/\\\/schema.org\",\"@graph\":[{\"@type\":\"WebPage\",\"@id\":\"https:\\\/\\\/numpex.org\\\/fr\\\/genre-diversite-equite\\\/\",\"url\":\"https:\\\/\\\/numpex.org\\\/fr\\\/genre-diversite-equite\\\/\",\"name\":\"Genre \\\/ Diversit\u00e9 \\\/ \u00c9quit\u00e9 - NumPEx\",\"isPartOf\":{\"@id\":\"https:\\\/\\\/numpex.org\\\/fr\\\/#website\"},\"datePublished\":\"2023-10-02T02:53:55+00:00\",\"dateModified\":\"2026-09-10T20:37:23+00:00\",\"breadcrumb\":{\"@id\":\"https:\\\/\\\/numpex.org\\\/fr\\\/genre-diversite-equite\\\/#breadcrumb\"},\"inLanguage\":\"fr-FR\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\\\/\\\/numpex.org\\\/fr\\\/genre-diversite-equite\\\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\\\/\\\/numpex.org\\\/fr\\\/genre-diversite-equite\\\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Home\",\"item\":\"https:\\\/\\\/numpex.org\\\/fr\\\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Genre \\\/ Diversit\u00e9 \\\/ \u00c9quit\u00e9\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\\\/\\\/numpex.org\\\/fr\\\/#website\",\"url\":\"https:\\\/\\\/numpex.org\\\/fr\\\/\",\"name\":\"NumPEx\",\"description\":\"Digital for Exascale\",\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\\\/\\\/numpex.org\\\/fr\\\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"fr-FR\"}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"Genre \/ Diversit\u00e9 \/ \u00c9quit\u00e9 - NumPEx","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/numpex.org\/fr\/genre-diversite-equite\/","og_locale":"fr_FR","og_type":"article","og_title":"Genre \/ Diversit\u00e9 \/ \u00c9quit\u00e9 - NumPEx","og_description":"[vc_row row_height_percent=\u00a0\u00bb0&Prime; overlay_alpha=\u00a0\u00bb50&Prime; gutter_size=\u00a0\u00bb3&Prime; column_width_percent=\u00a0\u00bb100&Prime; shift_y=\u00a0\u00bb0&Prime; z_index=\u00a0\u00bb0&Prime; sticky=\u00a0\u00bbyes\u00a0\u00bb content_parallax=\u00a0\u00bb0&Prime; uncode_shortcode_id=\u00a0\u00bb165842&Prime; css=\u00a0\u00bb.vc_custom_1785924495010{margin-top: 1% !important;}\u00a0\u00bb][vc_column width=\u00a0\u00bb1\/1&Prime;][vc_raw_html]PCEtLSA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICBOdW1QRXgg4oCUIE1lbnUgZGUgc2VjdGlvbnMgc3RpY2t5IOKAlCB2LjYuNAogIE5hb3MgQWdlbmN5IMK3IDIwMjYtMDktMTAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09IC0tPgoKPHN0eWxlPgogIDpyb290eyAtLW5weC10b3A6IDYwcHg7IH0gLyogaGF1dGV1ciBkdSBoZWFkZXIgVW5jb2RlIHN0aWNreSAqLwogIC5ucHgtc3VibmF2ewogICAgYmFja2dyb3VuZDogI0UwOTkwMDsgLyogb3JhbmdlIGQnYWNjZW50dWF0aW9uIE51bVBFeCAqLwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYmEoMCwwLDAsLjA4KTsKICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICB3aWR0aDogMTAwJTsKICAgIHotaW5kZXg6IDQwOwogIH0KICAubnB4LXN1Ym5hdltoaWRkZW5deyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH0KICAubnB4LXN1Ym5hdi5ucHgtc3R1Y2t7IGJvcmRlci1yYWRpdXM6IDAgMCAxMnB4IDEycHg7IH0KICAubnB4LXN1Ym5hdi5ucHgtc3R1Y2t7CiAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB0b3A6IHZhcigtLW5weC10b3ApOwogICAgbGVmdDogMDsgcmlnaHQ6IDA7CiAgfQogIC5ucHgtc3VibmF2X19pbm5lcnsKICAgIC8qIHYuNi40IDogbWV0cmlxdWVzIHBpbG90ZWVzIHBhciB2YXJpYWJsZXMuIExlcyB2YWxldXJzIGRlIHJlcGxpCiAgICAgICBTT05UIGNlbGxlcyBkZSBsYSB2LjYuMiA6IHNhbnMgSlMsIHJlbmR1IGlkZW50aXF1ZS4gKi8KICAgIG1heC13aWR0aDogMTE0MHB4OwogICAgbWFyZ2luOiAwIGF1dG87CiAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC13cmFwOiBub3dyYXA7CiAgICBnYXA6IDAgdmFyKC0tbnB4LWdhcCwgMTBweCk7CiAgICBtaW4taGVpZ2h0OiA0NnB4OwogICAgcGFkZGluZy10b3A6IDZweDsKICAgIHBhZGRpbmctYm90dG9tOiA2cHg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZm9udC1zaXplOiB2YXIoLS1ucHgtZnMsIDExcHgpOwogICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgIGxldHRlci1zcGFjaW5nOiB2YXIoLS1ucHgtbHMsIC4xMmVtKTsKICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgb3ZlcmZsb3cteTogaGlkZGVuOwogICAgLXdlYmtpdC1vdmVyZmxvdy1zY3JvbGxpbmc6IHRvdWNoOwogICAgc2Nyb2xsYmFyLXdpZHRoOiBub25lOwogICAgLW1zLW92ZXJmbG93LXN0eWxlOiBub25lOwogICAgLyogZm9udC1mYW1pbHk6ICdQb3BwaW5zJywgc3lzdGVtLXVpLCBzYW5zLXNlcmlmOyAqLwogIH0KICAubnB4LXN1Ym5hdl9faW5uZXI6Oi13ZWJraXQtc2Nyb2xsYmFyeyBkaXNwbGF5OiBub25lOyB9CiAgLyogU3DDqWNpZmljaXTDqSByZW5mb3Jjw6llICsgIWltcG9ydGFudCA6IG5ldXRyYWxpc2UgbGVzIGNvdWxldXJzIGRlIGxpZW5zIGR1IHRow6htZSBVbmNvZGUgKG9yYW5nZSBhdSBzdXJ2b2wvY2xpYykgKi8KICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYSwKICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYTp2aXNpdGVkewogICAgY29sb3I6IHJnYmEoMjU1LDI1MCwyNDMsLjg4KSAhaW1wb3J0YW50OyAvKiBibGFuYyBjYXNzw6kgKi8KICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgYm9yZGVyLWJvdHRvbTogbm9uZSAhaW1wb3J0YW50OwogICAgYm94LXNoYWRvdzogbm9uZSAhaW1wb3J0YW50OwogICAgcGFkZGluZzogOHB4IHZhcigtLW5weC1weCwgMTRweCk7CiAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgIHRyYW5zaXRpb246IGNvbG9yIC4xOHMsIGJhY2tncm91bmQtY29sb3IgLjE4czsKICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7ICAvKiB2LjYuNCA6IHVuIGxpYmVsbGUgbmUgc2UgY291cGUgamFtYWlzICovCiAgICBmbGV4OiAwIDAgYXV0bzsgICAgICAgLyogdi42LjQgOiBsZXMgcGFzdGlsbGVzIG5lIHNlIGNvbXByaW1lbnQgcGFzICovCiAgfQogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmhvdmVyLAogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmZvY3VzLAogIG5hdi5ucHgtc3VibmF2IC5ucHgtc3VibmF2X19pbm5lciBhOmFjdGl2ZXsKICAgIGNvbG9yOiAjRkZGRkZGICFpbXBvcnRhbnQ7CiAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsMCwwLC4xMik7CiAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICB9CiAgbmF2Lm5weC1zdWJuYXYgLm5weC1zdWJuYXZfX2lubmVyIGEubnB4LWFjdGl2ZSwKICBuYXYubnB4LXN1Ym5hdiAubnB4LXN1Ym5hdl9faW5uZXIgYS5ucHgtYWN0aXZlOmhvdmVyewogICAgY29sb3I6ICNGRkZGRkYgIWltcG9ydGFudDsKICAgIGJhY2tncm91bmQ6ICNBODZGMDA7IC8qIG9yYW5nZSBmb25jw6ksIGFwbGF0IHNpbXBsZSAqLwogICAgZm9udC13ZWlnaHQ6IDcwMDsKICB9Cjwvc3R5bGU+Cgo8bmF2IGNsYXNzPSJucHgtc3VibmF2IiBhcmlhLWxhYmVsPSJQYWdlIHNlY3Rpb25zIiBoaWRkZW4+CiAgPGRpdiBjbGFzcz0ibnB4LXN1Ym5hdl9faW5uZXIiPjwvZGl2Pgo8L25hdj4KCjxzY3JpcHQ+CihmdW5jdGlvbigpewogICd1c2Ugc3RyaWN0JzsKCiAgLyogPT09PT09PT09PT09PT09PT09PT0gQ09ORklHIFNJVEUgPT09PT09PT09PT09PT09PT09PT0KICAgICBTZXVsZSB6b25lIMOgIGFkYXB0ZXIgcG91ciByw6l1dGlsaXNlciBsZSBibG9jIGFpbGxldXJzLiAqLwogIHZhciBQUkVGSVggPSAnbmF2LSc7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIHByw6lmaXhlIGRlcyBSb3cgSUQgw6AgZMOpdGVjdGVyICovCiAgdmFyIFNUUklQICA9IFsvLShlbnxmcikkL2ksIC8tZXhhLVthLXowLTldKyQvaV07ICAgLyogc3VmZml4ZXMgZCd1bmljaXTDqSDDoCBpZ25vcmVyICAqLwoKICAvKiBSZXBsaSBwb3VyIGxlcyBwYWdlcyBQQVMgRU5DT1JFIE1JR1LDiUVTIHZlcnMgbGUgcHLDqWZpeGUgbmF2LQogICAgICh0eXBpcXVlbWVudCBsZXMgdHJhZHVjdGlvbnMgV1BNTCBkb250IGxlcyBSb3cgSUQgbidvbnQgcGFzIMOpdMOpCiAgICAgcmVub21tw6lzKS4gVXRpbGlzw6kgVU5JUVVFTUVOVCBzaSBsYSBwYWdlIG5lIGNvbnRpZW50IGF1Y3VuZSByb3cKICAgICDCqyBuYXYtIMK7LiBSZXByZW5kIGxlcyBjbMOpcyBkZSBsYSB2LjUgOiB1bmUgcm93IG5vbW3DqWUKICAgICDCqyBjb25zb3J0aXVtLWV4YS1tYS1lbiDCuyBvdSBzaW1wbGVtZW50IMKrIGNvbnNvcnRpdW0gwrsgZXN0CiAgICAgcmV0cm91dsOpZS4gTGlzdGUgZmVybcOpZSA9IGF1Y3VuIHJpc3F1ZSBkZSBmYXV4IHBvc2l0aWYuICovCiAgdmFyIExFR0FDWV9LRVlTID0gWwogICAgJ292ZXJ2aWV3JywgJ2NvbnNvcnRpdW0nLCAncmVzdWx0cycsICdtZXRyaWNzJywgJ3NvZnR3YXJlJywKICAgICduZXdzJywgJ2V2ZW50cycsICdhZ2VuZGEnLCAndGVhbScsICdjb250YWN0JwogIF07CgogIHZhciBMQUJFTFMgPSB7CiAgICAvKiBMaWJlbGzDqXMgcHLDqWbDqXLDqXMgcGFyIGNsw6kuIFRvdXRlIGNsw6kgYWJzZW50ZSBlc3QgYWZmaWNow6llCiAgICAgICBjYXBpdGFsaXPDqWUgdGVsbGUgcXVlbGxlIChuYXYtam9pbi11cyAtPiDCqyBKb2luIFVzIMK7KS4gKi8KICAgIGVuOiB7CiAgICAgICdjb25zb3J0aXVtJzogJ0NvbnNvcnRpdW0gJiBXb3JrcGFja2FnZXMnLAogICAgICAncmVzdWx0cyc6ICAgICdSZXN1bHRzICYgSW1wYWN0JywKICAgICAgJ21ldHJpY3MnOiAgICAnUHJvamVjdCBNZXRyaWNzJywKICAgICAgJ3RlYW0nOiAgICAgICAnVGhlIFRlYW0nCiAgICB9LAogICAgZnI6IHsKICAgICAgJ292ZXJ2aWV3JzogICAnUHLDqXNlbnRhdGlvbicsCiAgICAgICdjb25zb3J0aXVtJzogJ0NvbnNvcnRpdW0gZXQgbG90cyBkZSB0cmF2YWlsJywKICAgICAgJ3Jlc3VsdHMnOiAgICAnUsOpc3VsdGF0cyBldCBpbXBhY3QnLAogICAgICAnbWV0cmljcyc6ICAgICdDaGlmZnJlcyBjbMOpcycsCiAgICAgICdzb2Z0d2FyZSc6ICAgJ0xvZ2ljaWVscycsCiAgICAgICduZXdzJzogICAgICAgJ0FjdHVhbGl0w6lzJywKICAgICAgJ2V2ZW50cyc6ICAgICAnw4l2w6huZW1lbnRzJywKICAgICAgJ3RlYW0nOiAgICAgICAnTOKAmcOpcXVpcGUnCiAgICB9CiAgfTsKICB2YXIgU1RJQ0tfTU9ERSA9ICd1bmNvZGUnOyAvKiAndW5jb2RlJyA9IGxhIHJvdyBnw6hyZSBsZSBzdGlja3kgwrcgJ2pzJyA9IGxlIHNjcmlwdCBjb2xsZSBsdWktbcOqbWUgKi8KICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLwoKICB2YXIgREVCVUcgPSAvWz8mXW5weGRlYnVnPTEvLnRlc3Qod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgZnVuY3Rpb24gbG9nKCl7CiAgICBpZighREVCVUcgfHwgIXdpbmRvdy5jb25zb2xlIHx8ICFjb25zb2xlLmxvZykgcmV0dXJuOwogICAgY29uc29sZS5sb2cuYXBwbHkoY29uc29sZSwgWydbbnB4LXN1Ym5hdl0nXS5jb25jYXQoW10uc2xpY2UuY2FsbChhcmd1bWVudHMpKSk7CiAgfQoKICAvKiAtLS0tIExhbmd1ZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgPGh0bWwgbGFuZz4gcG9zw6kgcGFyIFdQTUwuIFJlcGxpcyBzdWNjZXNzaWZzIHNpIGwnYXR0cmlidXQgbWFucXVlIDoKICAgICB1biBhbmPDqnRyZSBwb3J0ZXVyIGRlIGxhbmcsIHB1aXMgbGVzIGNsYXNzZXMgZHUgYm9keS4gKi8KICBmdW5jdGlvbiBkZXRlY3RMYW5nKGVsKXsKICAgIHZhciB0YWcgPSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0QXR0cmlidXRlKCdsYW5nJykgfHwgJyc7CiAgICBpZighdGFnICYmIGVsICYmIGVsLmNsb3Nlc3QpewogICAgICB2YXIgaG9zdCA9IGVsLmNsb3Nlc3QoJ1tsYW5nXScpOwogICAgICBpZihob3N0KXsgdGFnID0gaG9zdC5nZXRBdHRyaWJ1dGUoJ2xhbmcnKSB8fCAnJzsgfQogICAgfQogICAgaWYoIXRhZyl7CiAgICAgIHZhciBjbHMgPSAoZG9jdW1lbnQuYm9keSAmJiBkb2N1bWVudC5ib2R5LmNsYXNzTmFtZSkgfHwgJyc7CiAgICAgIGlmKC8oPzpsYW5nfGxhbmd1YWdlKS1mclxifGZyW18tXUZSL2kudGVzdChjbHMpKXsgdGFnID0gJ2ZyJzsgfQogICAgfQogICAgcmV0dXJuIC9eZnIvaS50ZXN0KHRhZykgPyAnZnInIDogJ2VuJzsKICB9CgogIGZ1bmN0aW9uIGtleU9mKGlkKXsKICAgIHZhciBrID0gaWQuc2xpY2UoUFJFRklYLmxlbmd0aCkudG9Mb3dlckNhc2UoKTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBTVFJJUC5sZW5ndGg7IGkrKyl7IGsgPSBrLnJlcGxhY2UoU1RSSVBbaV0sICcnKTsgfQogICAgcmV0dXJuIGs7CiAgfQogIGZ1bmN0aW9uIHRpdGxlQ2FzZShrZXkpewogICAgcmV0dXJuIGtleS5zcGxpdCgnLScpLm1hcChmdW5jdGlvbih3KXsKICAgICAgcmV0dXJuIHcgPyB3LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgdy5zbGljZSgxKSA6IHc7CiAgICB9KS5qb2luKCcgJyk7CiAgfQoKICAvKiBEb3VibGUgc8OpY3VyaXTDqSA6IMOpY2FydGUgbGVzIG1lbnVzIGfDqW7DqXLDqXMgcGFyIFdvcmRQcmVzcyBldCB0b3V0IGNlCiAgICAgcXVpIHZpdCBkYW5zIGxhIG5hdmlnYXRpb24gb3UgbGUgaGVhZGVyIOKAlCBpbmNoYW5nw6kgZGVwdWlzIGxhIHYuNi4xLiAqLwogIGZ1bmN0aW9uIGlzU2VjdGlvbkNhbmRpZGF0ZShlbCl7CiAgICB2YXIgdGFnID0gZWwudGFnTmFtZTsKICAgIGlmKHRhZyA9PT0gJ1VMJyB8fCB0YWcgPT09ICdMSScgfHwgdGFnID09PSAnQScgfHwgdGFnID09PSAnTkFWJyl7IHJldHVybiBmYWxzZTsgfQogICAgaWYoZWwuY2xvc2VzdCAmJiBlbC5jbG9zZXN0KCduYXYsIGhlYWRlciwgLm5weC1zdWJuYXYnKSl7IHJldHVybiBmYWxzZTsgfQogICAgcmV0dXJuIHRydWU7CiAgfQoKICBmdW5jdGlvbiBpbkRvY3VtZW50T3JkZXIoYSwgYil7CiAgICB2YXIgcG9zID0gYS5zZWN0aW9uLmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKGIuc2VjdGlvbik7CiAgICByZXR1cm4gKHBvcyAmIE5vZGUuRE9DVU1FTlRfUE9TSVRJT05fRk9MTE9XSU5HKSA\/IC0xIDogMTsKICB9CgogIC8qIC0tLS0gRMOpY291dmVydGUgZGVzIHNlY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICAgMSkgTW9kZSBub21pbmFsIDogdG91dGVzIGxlcyByb3dzIGRvbnQgbCdpZCBjb21tZW5jZSBwYXIgwqsgbmF2LSDCuy4KICAgICAyKSBSZXBsaSA6IHNpIGV0IHNldWxlbWVudCBzaSBsZSBtb2RlIDEgbmUgZG9ubmUgUklFTiwgb24gY2hlcmNoZQogICAgICAgIGxlcyBjbMOpcyBow6lyaXTDqWVzIGRlIGxhIHYuNSwgYXZlYyBvdSBzYW5zIHN1ZmZpeGUuCiAgICAgUmVudm9pZSB7IGVudHJpZXM6IFsuLi5dLCBtb2RlOiAncHJlZml4JyB8ICdsZWdhY3knIHwgJ25vbmUnIH0uICovCiAgZnVuY3Rpb24gZGlzY292ZXIoZGljdCl7CiAgICB2YXIgc2VlbiA9IE9iamVjdC5jcmVhdGUobnVsbCksIGVudHJpZXMgPSBbXTsKCiAgICBmdW5jdGlvbiBwdXNoKGVsLCBrZXkpewogICAgICBpZighZWwgfHwgIWtleSB8fCBzZWVuW2tleV0peyByZXR1cm47IH0KICAgICAgc2VlbltrZXldID0gdHJ1ZTsKICAgICAgZW50cmllcy5wdXNoKHsgc2VjdGlvbjogZWwsIGtleToga2V5LCBsYWJlbDogZGljdFtrZXldIHx8IHRpdGxlQ2FzZShrZXkpIH0pOwogICAgfQoKICAgIHZhciBmb3VuZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ1tpZF49IicgKyBQUkVGSVggKyAnIl0nKTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBmb3VuZC5sZW5ndGg7IGkrKyl7CiAgICAgIGlmKCFpc1NlY3Rpb25DYW5kaWRhdGUoZm91bmRbaV0pKXsgY29udGludWU7IH0KICAgICAgcHVzaChmb3VuZFtpXSwga2V5T2YoZm91bmRbaV0uaWQpKTsKICAgIH0KICAgIGlmKGVudHJpZXMubGVuZ3RoKXsKICAgICAgd2FybklmUGFydGlhbGx5TWlncmF0ZWQoc2Vlbik7CiAgICAgIHJldHVybiB7IGVudHJpZXM6IGVudHJpZXMsIG1vZGU6ICdwcmVmaXgnIH07CiAgICB9CgogICAgZm9yKHZhciBqID0gMDsgaiA8IExFR0FDWV9LRVlTLmxlbmd0aDsgaisrKXsKICAgICAgdmFyIGsgID0gTEVHQUNZX0tFWVNbal07CiAgICAgIHZhciBlbCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGspIHx8IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ1tpZF49IicgKyBrICsgJy0iXScpOwogICAgICBpZihlbCAmJiBpc1NlY3Rpb25DYW5kaWRhdGUoZWwpKXsgcHVzaChlbCwgayk7IH0KICAgIH0KICAgIGlmKGVudHJpZXMubGVuZ3RoKXsKICAgICAgZW50cmllcy5zb3J0KGluRG9jdW1lbnRPcmRlcik7IC8qIGxhIGxpc3RlIGRlcyBjbMOpcyBuZSBzdWl0IHBhcyBsJ29yZHJlIGRlIGxhIHBhZ2UgKi8KICAgICAgcmV0dXJuIHsgZW50cmllczogZW50cmllcywgbW9kZTogJ2xlZ2FjeScgfTsKICAgIH0KCiAgICByZXR1cm4geyBlbnRyaWVzOiBlbnRyaWVzLCBtb2RlOiAnbm9uZScgfTsKICB9CgogIC8qIC0tLS0gTWlncmF0aW9uIHBhcnRpZWxsZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIENhcyBwacOoZ2UgOiBzdXIgdW5lIG3Dqm1lIHBhZ2UgY2VydGFpbmVzIHJvd3Mgb250IMOpdMOpIHJlbm9tbcOpZXMgZW4KICAgICBuYXYt4oCmIGV0IGQnYXV0cmVzIG5vbi4gTGUgbW9kZSBub21pbmFsIGwnZW1wb3J0ZSBldCBsZXMgcm93cyBub24KICAgICByZW5vbW3DqWVzIGRpc3BhcmFpc3NlbnQgU0lMRU5DSUVVU0VNRU5UIGR1IG1lbnUuIE9uIGxlIHNpZ25hbGUuICovCiAgZnVuY3Rpb24gd2FybklmUGFydGlhbGx5TWlncmF0ZWQoc2Vlbil7CiAgICBpZighd2luZG93LmNvbnNvbGUgfHwgIWNvbnNvbGUud2Fybil7IHJldHVybjsgfQogICAgdmFyIHN0cmFnZ2xlcnMgPSBbXTsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBMRUdBQ1lfS0VZUy5sZW5ndGg7IGkrKyl7CiAgICAgIHZhciBrID0gTEVHQUNZX0tFWVNbaV07CiAgICAgIGlmKHNlZW5ba10peyBjb250aW51ZTsgfSAvKiBkw6lqw6AgcHLDqXNlbnQgdmlhIHVuZSByb3cgbmF2LSAqLwogICAgICB2YXIgZWwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChrKSB8fCBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdbaWRePSInICsgayArICctIl0nKTsKICAgICAgaWYoZWwgJiYgaXNTZWN0aW9uQ2FuZGlkYXRlKGVsKSl7IHN0cmFnZ2xlcnMucHVzaChrICsgJyAoIycgKyBlbC5pZCArICcpJyk7IH0KICAgIH0KICAgIGlmKCFzdHJhZ2dsZXJzLmxlbmd0aCl7IHJldHVybjsgfQogICAgY29uc29sZS53YXJuKAogICAgICAnW25weC1zdWJuYXZdIE1pZ3JhdGlvbiBpbmNvbXBsZXRlIHN1ciBjZXR0ZSBwYWdlIDogJyArIHN0cmFnZ2xlcnMubGVuZ3RoICsKICAgICAgJyByb3cocykgcG9ydGVudCBlbmNvcmUgdW4gYW5jaWVuIFJvdyBJRCBldCBzb250IEFCU0VOVEVTIGR1IG1lbnUgLT4gJyArCiAgICAgIHN0cmFnZ2xlcnMuam9pbignLCAnKSArICdcbicgKwogICAgICAnTGVzIHJlbm9tbWVyIGF2ZWMgbGUgcHJlZml4ZSAiJyArIFBSRUZJWCArICciIChleC4gJyArIFBSRUZJWCArIExFR0FDWV9LRVlTWzBdICsgJykuJwogICAgKTsKICB9CgogIC8qIC0tLS0gTWVzc2FnZSBkZSBkaWFnbm9zdGljIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgIEludmlzaWJsZSBwb3VyIGxlcyB2aXNpdGV1cnMsIGTDqWNpc2lmIHBvdXIgbGEgcGVyc29ubmUgcXVpIHJlcHJlbmQKICAgICBsZSBkb3NzaWVyIDogb24gZGl0IGNlIHF1aSBhIMOpdMOpIGNoZXJjaMOpIGV0IGNlIHF1aSBhIMOpdMOpIHRyb3V2w6kuICovCiAgZnVuY3Rpb24gd2Fybk5vdGhpbmdGb3VuZCgpewogICAgaWYoIXdpbmRvdy5jb25zb2xlIHx8ICFjb25zb2xlLndhcm4peyByZXR1cm47IH0KICAgIHZhciB3aXRoSWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdbaWRdJyk7CiAgICBjb25zb2xlLndhcm4oCiAgICAgICdbbnB4LXN1Ym5hdl0gQXVjdW5lIHNlY3Rpb24gdHJvdXbDqWUgOiBsYSBiYXJyZSByZXN0ZSBtYXNxdcOpZS5cbicgKwogICAgICAnLSBSZWNoZXJjaMOpIGVuIHByaW9yaXTDqSA6IGRlcyBSb3cgSUQgY29tbWVuw6dhbnQgcGFyICInICsgUFJFRklYICsgJyIgKGV4LiBuYXYtb3ZlcnZpZXcpLlxuJyArCiAgICAgICctIFB1aXMsIGVuIHJlcGxpLCBsZXMgY2xlcyBoZXJpdGVlcyA6ICcgKyBMRUdBQ1lfS0VZUy5qb2luKCcsICcpICsgJy5cbicgKwogICAgICAnLSBQYWdlIGxhbmc9IicgKyAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnbGFuZycpIHx8ICcoYWJzZW50KScpICsgJyIsICcgKwogICAgICB3aXRoSWQubGVuZ3RoICsgJyBlbGVtZW50KHMpIHBvcnRlbnQgdW4gaWQuXG4nICsKICAgICAgJy0gQ2F1c2UgbGEgcGx1cyBmcmVxdWVudGUgOiBsZXMgUm93IElEIGRlIENFVFRFIHBhZ2UgbmUgc29udCBwYXMgbm9tbWVzLiAnICsKICAgICAgJ1NvdXMgV1BNTCB1bmUgdHJhZHVjdGlvbiBlc3QgdW4gcG9zdCBkaXN0aW5jdCDigJQgcmVub21tZXIgbGVzIFJvdyBJRCBkZSBsYSBwYWdlICcgKwogICAgICAnc291cmNlIG5lIHJlbm9tbWUgcGFzIGNldXggZGUgbGEgdHJhZHVjdGlvbiA6IGlsIGZhdXQgbGVzIHNhaXNpciBzdXIgY2hhcXVlIGxhbmd1ZS5cbicgKwogICAgICAnLSBQb3VyIGxhIGxpc3RlIGRlcyBpZHMgcHJlc2VudHMsIHJlY2hhcmdlciBsYSBwYWdlIGF2ZWMgP25weGRlYnVnPTEnCiAgICApOwogICAgaWYoREVCVUcpewogICAgICB2YXIgaWRzID0gW107CiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCB3aXRoSWQubGVuZ3RoOyBpKyspeyBpZHMucHVzaCh3aXRoSWRbaV0uaWQpOyB9CiAgICAgIGNvbnNvbGUud2FybignW25weC1zdWJuYXZdIGlkcyBwcmVzZW50cyBzdXIgbGEgcGFnZSA6JywgaWRzKTsKICAgIH0KICB9CgogIC8qIC0tLS0gSW5pdGlhbGlzYXRpb24gZCd1bmUgaW5zdGFuY2UgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KICAgICBSZW52b2llIHRydWUgc2kgbGEgYmFycmUgYSDDqXTDqSBjb25zdHJ1aXRlLCBmYWxzZSBzJ2lsIG4neSBhdmFpdAogICAgIGF1Y3VuZSBzZWN0aW9uIChsJ2luc3RhbmNlIHJlc3RlIGFsb3JzIMOpbGlnaWJsZSDDoCB1bmUgbm91dmVsbGUKICAgICB0ZW50YXRpdmUgOiBkYXRhLW5weC1yZWFkeSBuJ2VzdCBwb3PDqSBxdSdlbiBjYXMgZGUgc3VjY8OocykuICovCiAgZnVuY3Rpb24gaW5pdChuYXYpewogICAgdmFyIGlubmVyID0gbmF2LnF1ZXJ5U2VsZWN0b3IoJy5ucHgtc3VibmF2X19pbm5lcicpOwogICAgaWYoIWlubmVyKXsKICAgICAgbmF2LnNldEF0dHJpYnV0ZSgnZGF0YS1ucHgtcmVhZHknLCAnMScpOyAvKiBiYWxpc2FnZSBpbmF0dGVuZHUgOiBuZSBwYXMgYm91Y2xlciBkZXNzdXMgKi8KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CgogICAgdmFyIGxhbmcgID0gZGV0ZWN0TGFuZyhuYXYpOwogICAgdmFyIGRpY3QgID0gTEFCRUxTW2xhbmddIHx8IHt9OwogICAgdmFyIGZvdW5kID0gZGlzY292ZXIoZGljdCk7CiAgICB2YXIgZW50cmllcyA9IGZvdW5kLmVudHJpZXM7CgogICAgaWYoIWVudHJpZXMubGVuZ3RoKXsgcmV0dXJuIGZhbHNlOyB9CgogICAgbmF2LnNldEF0dHJpYnV0ZSgnZGF0YS1ucHgtcmVhZHknLCAnMScpOwogICAgbG9nKCdtb2RlID0nLCBmb3VuZC5tb2RlLCAnfCBsYW5nID0nLCBsYW5nLCAnfCBlbnRyZWVzID0nLCBlbnRyaWVzLm1hcChmdW5jdGlvbihlKXsKICAgICAgcmV0dXJuIGUua2V5ICsgJyAtPiAnICsgZS5sYWJlbCArICcgKCMnICsgZS5zZWN0aW9uLmlkICsgJyknOwogICAgfSkpOwoKICAgIGlubmVyLmlubmVySFRNTCA9ICcnOwogICAgZW50cmllcy5mb3JFYWNoKGZ1bmN0aW9uKGUpewogICAgICB2YXIgYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTsKICAgICAgYS5ocmVmID0gJyMnICsgZS5zZWN0aW9uLmlkOwogICAgICBhLnRleHRDb250ZW50ID0gZS5sYWJlbDsKICAgICAgaW5uZXIuYXBwZW5kQ2hpbGQoYSk7CiAgICAgIGUubGluayA9IGE7CiAgICB9KTsKICAgIG5hdi5yZW1vdmVBdHRyaWJ1dGUoJ2hpZGRlbicpOwoKICAgIC8qIC0tLS0gdi42LjQgOiBsYSBiYXJyZSB0aWVudCBzdXIgdW5lIGxpZ25lIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgICAgZmxleC13cmFwOm5vd3JhcCBzdXBwcmltZSBsYSAyZSBsaWduZS4gT24gbWVzdXJlIGV0IG9uIHJldGllbnQgbGUKICAgICAgIFBSRU1JRVIgcGFsaWVyIHF1aSByZW50cmUuIExlIHBhbGllciAwIGVzdCBsZSByZW5kdSB2LjYuMiA6IHVuZQogICAgICAgYmFycmUgcXVpIHJlbnRyYWl0IGRlamEgbmUgYm91Z2UgcGFzIGQndW4gcGl4ZWwuIFNpIG1lbWUgbGUKICAgICAgIHBsYW5jaGVyIGRlYm9yZGUgKHRlbGVwaG9uZSksIGxhIGJhcnJlIGRlZmlsZSBob3Jpem9udGFsZW1lbnQuCiAgICAgICBUb3V0IGVzdCBlbnZlbG9wcGUgOiBlbiBjYXMgZCdlcnJldXIgb24gcmV2aWVudCBhdSBwYWxpZXIgMC4gKi8KICAgIHZhciBTVEVQUyA9IFsKICAgICAgeyBmczogJzExcHgnLCAgIGxzOiAnLjEyZW0nLCBweDogJzE0cHgnLCBnYXA6ICcxMHB4JyB9LCAvKiByZW5kdSB2LjYuMiAqLwogICAgICB7IGZzOiAnMTFweCcsICAgbHM6ICcuMDllbScsIHB4OiAnMTNweCcsIGdhcDogJzlweCcgIH0sCiAgICAgIHsgZnM6ICcxMC41cHgnLCBsczogJy4wN2VtJywgcHg6ICcxMnB4JywgZ2FwOiAnOHB4JyAgfSwKICAgICAgeyBmczogJzEwcHgnLCAgIGxzOiAnLjA2ZW0nLCBweDogJzExcHgnLCBnYXA6ICc3cHgnICB9LAogICAgICB7IGZzOiAnOS41cHgnLCAgbHM6ICcuMDVlbScsIHB4OiAnMTBweCcsIGdhcDogJzZweCcgIH0sCiAgICAgIHsgZnM6ICc5cHgnLCAgICBsczogJy4wNGVtJywgcHg6ICc5cHgnLCAgZ2FwOiAnNXB4JyAgfSAgLyogcGxhbmNoZXIgKi8KICAgIF07CiAgICBmdW5jdGlvbiBhcHBseVN0ZXAocyl7CiAgICAgIHZhciBzdCA9IGlubmVyLnN0eWxlOwogICAgICBzdC5zZXRQcm9wZXJ0eSgnLS1ucHgtZnMnLCAgcy5mcyk7CiAgICAgIHN0LnNldFByb3BlcnR5KCctLW5weC1scycsICBzLmxzKTsKICAgICAgc3Quc2V0UHJvcGVydHkoJy0tbnB4LXB4JywgIHMucHgpOwogICAgICBzdC5zZXRQcm9wZXJ0eSgnLS1ucHgtZ2FwJywgcy5nYXApOwogICAgfQogICAgZnVuY3Rpb24gb3ZlcmZsb3dpbmcoKXsgcmV0dXJuIGlubmVyLnNjcm9sbFdpZHRoID4gaW5uZXIuY2xpZW50V2lkdGggKyAxOyB9CgogICAgdmFyIGZpdHRpbmcgPSBmYWxzZSwgbGFzdFcgPSAtMTsKICAgIGZ1bmN0aW9uIGZpdCgpewogICAgICBpZihmaXR0aW5nKXsgcmV0dXJuOyB9CiAgICAgIGZpdHRpbmcgPSB0cnVlOwogICAgICB0cnl7CiAgICAgICAgLyogQmFycmUgbm9uIG1lc3VyYWJsZSAobWFzcXVlZSwgb25nbGV0IHJlcGxpZSkgOiBuZSByaWVuIGNvbmNsdXJlLiAqLwogICAgICAgIGlmKGlubmVyLmNsaWVudFdpZHRoID4gNDApewogICAgICAgICAgdmFyIGksIGNob3NlbiA9IFNURVBTLmxlbmd0aCAtIDE7CiAgICAgICAgICBmb3IoaSA9IDA7IGkgPCBTVEVQUy5sZW5ndGg7IGkrKyl7CiAgICAgICAgICAgIGFwcGx5U3RlcChTVEVQU1tpXSk7CiAgICAgICAgICAgIGlmKCFvdmVyZmxvd2luZygpKXsgY2hvc2VuID0gaTsgYnJlYWs7IH0KICAgICAgICAgIH0KICAgICAgICAgIGlmKGNob3NlbiAhPT0gaSl7IGFwcGx5U3RlcChTVEVQU1tjaG9zZW5dKTsgfQogICAgICAgICAgbGFzdFcgPSBuYXYuY2xpZW50V2lkdGg7CiAgICAgICAgfQogICAgICB9Y2F0Y2goZXJyKXsKICAgICAgICBhcHBseVN0ZXAoU1RFUFNbMF0pOyAgLyogamFtYWlzIGRlIGJhcnJlIGNhc3NlZSAqLwogICAgICB9CiAgICAgIGZpdHRpbmcgPSBmYWxzZTsKICAgIH0KICAgIGZpdCgpOwoKICAgIC8qIExhIHBvbGljZSBkdSB0aGVtZSBhcnJpdmUgZW4gYXN5bmNocm9uZSA6IHJlbWVzdXJlciBhIHNvbiBhcnJpdmVlLiAqLwogICAgaWYoZG9jdW1lbnQuZm9udHMgJiYgZG9jdW1lbnQuZm9udHMucmVhZHkgJiYgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbil7CiAgICAgIHRyeXsgZG9jdW1lbnQuZm9udHMucmVhZHkudGhlbihmaXQsIGZpdCk7IH1jYXRjaChlcnIpe30KICAgIH0KICAgIHNldFRpbWVvdXQoZml0LCA2MDApOwogICAgc2V0VGltZW91dChmaXQsIDIwMDApOwoKICAgIC8qIExlIHBhc3NhZ2UgZW4gc3RpY2t5IGNoYW5nZSBsYSBsYXJnZXVyIHNhbnMgZXZlbmVtZW50IHJlc2l6ZS4gKi8KICAgIGlmKHdpbmRvdy5SZXNpemVPYnNlcnZlcil7CiAgICAgIHRyeXsKICAgICAgICBuZXcgUmVzaXplT2JzZXJ2ZXIoZnVuY3Rpb24oKXsKICAgICAgICAgIGlmKG5hdi5jbGllbnRXaWR0aCAhPT0gbGFzdFcpeyBmaXQoKTsgfQogICAgICAgIH0pLm9ic2VydmUobmF2KTsKICAgICAgfWNhdGNoKGVycil7fQogICAgfQoKICAgIC8qIEVuIG1vZGUgZGVmaWxlbWVudCwgZ2FyZGVyIGxhIHBhc3RpbGxlIGFjdGl2ZSB2aXNpYmxlLiAqLwogICAgZnVuY3Rpb24gcmV2ZWFsKGxpbmspewogICAgICBpZighbGluayB8fCAhb3ZlcmZsb3dpbmcoKSl7IHJldHVybjsgfQogICAgICB2YXIgbCA9IGxpbmsub2Zmc2V0TGVmdCwgciA9IGwgKyBsaW5rLm9mZnNldFdpZHRoOwogICAgICB2YXIgdnMgPSBpbm5lci5zY3JvbGxMZWZ0LCB2ZSA9IHZzICsgaW5uZXIuY2xpZW50V2lkdGg7CiAgICAgIGlmKGwgPCB2cyl7IGlubmVyLnNjcm9sbExlZnQgPSBNYXRoLm1heCgwLCBsIC0gMTIpOyB9CiAgICAgIGVsc2UgaWYociA+IHZlKXsgaW5uZXIuc2Nyb2xsTGVmdCA9IHIgLSBpbm5lci5jbGllbnRXaWR0aCArIDEyOyB9CiAgICB9CgogICAgZnVuY3Rpb24gdG9wT2Zmc2V0KCl7CiAgICAgIHZhciB2ID0gZ2V0Q29tcHV0ZWRTdHlsZShkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQpLmdldFByb3BlcnR5VmFsdWUoJy0tbnB4LXRvcCcpOwogICAgICByZXR1cm4gcGFyc2VJbnQodiwgMTApIHx8IDA7CiAgICB9CiAgICAvKiBEw6lmaWxlbWVudCBhdmVjIGNvbXBlbnNhdGlvbiBkZXMgZGV1eCBtZW51cy4gKi8KICAgIGZ1bmN0aW9uIHRvdGFsT2Zmc2V0KCl7IHJldHVybiB0b3BPZmZzZXQoKSArIG5hdi5vZmZzZXRIZWlnaHQgKyA4OyB9CgogICAgLyogLS0tLSBDb2xsYWdlIDogZml4ZWQgKyBwbGFjZWhvbGRlciBhbnRpLXNhdXQgKG1vZGUgJ2pzJykgLS0tLSAqLwogICAgdmFyIHBoID0gbnVsbDsKICAgIGlmKFNUSUNLX01PREUgPT09ICdqcycpewogICAgICBwaCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpOwogICAgICBwaC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnOwogICAgICBuYXYucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUocGgsIG5hdik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGljaygpewogICAgICBpZighcGgpeyByZXR1cm47IH0KICAgICAgdmFyIGFuY2hvciA9IChwaC5zdHlsZS5kaXNwbGF5ID09PSAnbm9uZScpID8gbmF2IDogcGg7CiAgICAgIHZhciBzaG91bGQgPSBhbmNob3IuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wIDw9IHRvcE9mZnNldCgpOwogICAgICBpZihzaG91bGQgJiYgIW5hdi5jbGFzc0xpc3QuY29udGFpbnMoJ25weC1zdHVjaycpKXsKICAgICAgICBwaC5zdHlsZS5oZWlnaHQgID0gbmF2Lm9mZnNldEhlaWdodCArICdweCc7CiAgICAgICAgcGguc3R5bGUuZGlzcGxheSA9ICdibG9jayc7CiAgICAgICAgbmF2LmNsYXNzTGlzdC5hZGQoJ25weC1zdHVjaycpOwogICAgICB9ZWxzZSBpZighc2hvdWxkICYmIG5hdi5jbGFzc0xpc3QuY29udGFpbnMoJ25weC1zdHVjaycpKXsKICAgICAgICBuYXYuY2xhc3NMaXN0LnJlbW92ZSgnbnB4LXN0dWNrJyk7CiAgICAgICAgcGguc3R5bGUuZGlzcGxheSA9ICdub25lJzsKICAgICAgfQogICAgfQoKICAgIC8qIC0tLS0gU2VjdGlvbiBhY3RpdmUgLS0tLSAqLwogICAgdmFyIGxhc3RDdXJyZW50ID0gbnVsbDsKICAgIGZ1bmN0aW9uIGhpZ2hsaWdodCgpewogICAgICB2YXIgbGltaXQgPSB0b3RhbE9mZnNldCgpICsgNDsKICAgICAgdmFyIGN1cnJlbnQgPSBudWxsOwogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgaWYoZS5zZWN0aW9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcCA8PSBsaW1pdCl7IGN1cnJlbnQgPSBlOyB9CiAgICAgIH0pOwogICAgICBlbnRyaWVzLmZvckVhY2goZnVuY3Rpb24oZSl7CiAgICAgICAgZS5saW5rLmNsYXNzTGlzdC50b2dnbGUoJ25weC1hY3RpdmUnLCBlID09PSBjdXJyZW50KTsKICAgICAgfSk7CiAgICAgIGlmKGN1cnJlbnQgIT09IGxhc3RDdXJyZW50KXsKICAgICAgICBsYXN0Q3VycmVudCA9IGN1cnJlbnQ7CiAgICAgICAgaWYoY3VycmVudCl7IHJldmVhbChjdXJyZW50LmxpbmspOyB9CiAgICAgIH0KICAgIH0KCiAgICAvKiAtLS0tIENsaWMgc3VyIHVuZSBlbnRyw6llIC0tLS0gKi8KICAgIHZhciBzbW9vdGggPSAhd2luZG93Lm1hdGNoTWVkaWEoJyhwcmVmZXJzLXJlZHVjZWQtbW90aW9uOiByZWR1Y2UpJykubWF0Y2hlczsKICAgIGVudHJpZXMuZm9yRWFjaChmdW5jdGlvbihlKXsKICAgICAgZS5saW5rLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXYpewogICAgICAgIGV2LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdmFyIHkgPSBlLnNlY3Rpb24uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wICsgd2luZG93LnBhZ2VZT2Zmc2V0IC0gdG90YWxPZmZzZXQoKTsKICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oeyB0b3A6IHksIGJlaGF2aW9yOiBzbW9vdGggPyAnc21vb3RoJyA6ICdhdXRvJyB9KTsKICAgICAgICBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCAnJywgJyMnICsgZS5zZWN0aW9uLmlkKTsKICAgICAgfSk7CiAgICB9KTsKCiAgICBmdW5jdGlvbiBvblNjcm9sbCgpeyBzdGljaygpOyBoaWdobGlnaHQoKTsgfQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsIG9uU2Nyb2xsLCB7IHBhc3NpdmU6IHRydWUgfSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigncmVzaXplJywgZnVuY3Rpb24oKXsgZml0KCk7IG9uU2Nyb2xsKCk7IH0pOwogICAgb25TY3JvbGwoKTsKICAgIHJldHVybiB0cnVlOwogIH0KCiAgLyogLS0tLSBBbW9yw6dhZ2UgOiB0b3V0ZXMgbGVzIGluc3RhbmNlcywgYXZlYyBxdWVscXVlcyByZWxhbmNlcyAtLS0tLS0KICAgICBMZXMgcm93cyBVbmNvZGUgcGV1dmVudCDDqnRyZSBpbmplY3TDqWVzIGFwcsOocyBsZSBET01Db250ZW50TG9hZGVkCiAgICAgKGxhenkgLyBBSkFYKSA6IG9uIHJldGVudGUgcGVuZGFudCB+Miw1IHMgYXZhbnQgZGUgY29uY2x1cmUuICovCiAgZnVuY3Rpb24gYm9vdCgpewogICAgdmFyIG5hdnMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCcubnB4LXN1Ym5hdjpub3QoW2RhdGEtbnB4LXJlYWR5XSknKTsKICAgIHZhciBwZW5kaW5nID0gMDsKICAgIGZvcih2YXIgaSA9IDA7IGkgPCBuYXZzLmxlbmd0aDsgaSsrKXsKICAgICAgaWYoIWluaXQobmF2c1tpXSkpeyBwZW5kaW5nKys7IH0KICAgIH0KICAgIHJldHVybiBwZW5kaW5nOwogIH0KCiAgZnVuY3Rpb24gcnVuKCl7CiAgICBpZihib290KCkgPT09IDApeyByZXR1cm47IH0KICAgIHZhciB0cmllcyA9IDA7CiAgICB2YXIgdGltZXIgPSBzZXRJbnRlcnZhbChmdW5jdGlvbigpewogICAgICB0cmllcysrOwogICAgICB2YXIgbGFzdCA9IHRyaWVzID49IDY7IC8qIDYgeCA0MDAgbXMgKi8KICAgICAgaWYoYm9vdCgpID09PSAwIHx8IGxhc3QpewogICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpOwogICAgICAgIGlmKGxhc3QgJiYgZG9jdW1lbnQucXVlcnlTZWxlY3RvcignLm5weC1zdWJuYXY6bm90KFtkYXRhLW5weC1yZWFkeV0pJykpewogICAgICAgICAgd2Fybk5vdGhpbmdGb3VuZCgpOwogICAgICAgIH0KICAgICAgfQogICAgfSwgNDAwKTsKICB9CgogIGlmKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICdsb2FkaW5nJyl7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJywgcnVuKTsKICB9ZWxzZXsKICAgIHJ1bigpOwogIH0KfSkoKTsKPC9zY3JpcHQ+[\/vc_raw_html][\/vc_column][\/vc_row][vc_row unlock_row_content=\u00a0\u00bbyes\u00a0\u00bb row_height_percent=\u00a0\u00bb0&Prime; override_padding=\u00a0\u00bbyes\u00a0\u00bb h_padding=\u00a0\u00bb5&Prime; top_padding=\u00a0\u00bb5&Prime; bottom_padding=\u00a0\u00bb5&Prime; [&hellip;]","og_url":"https:\/\/numpex.org\/fr\/genre-diversite-equite\/","og_site_name":"NumPEx","article_modified_time":"2026-09-10T20:37:23+00:00","twitter_card":"summary_large_image","twitter_misc":{"Dur\u00e9e de lecture estim\u00e9e":"19 minutes"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"WebPage","@id":"https:\/\/numpex.org\/fr\/genre-diversite-equite\/","url":"https:\/\/numpex.org\/fr\/genre-diversite-equite\/","name":"Genre \/ Diversit\u00e9 \/ \u00c9quit\u00e9 - NumPEx","isPartOf":{"@id":"https:\/\/numpex.org\/fr\/#website"},"datePublished":"2023-10-02T02:53:55+00:00","dateModified":"2026-09-10T20:37:23+00:00","breadcrumb":{"@id":"https:\/\/numpex.org\/fr\/genre-diversite-equite\/#breadcrumb"},"inLanguage":"fr-FR","potentialAction":[{"@type":"ReadAction","target":["https:\/\/numpex.org\/fr\/genre-diversite-equite\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/numpex.org\/fr\/genre-diversite-equite\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https:\/\/numpex.org\/fr\/"},{"@type":"ListItem","position":2,"name":"Genre \/ Diversit\u00e9 \/ \u00c9quit\u00e9"}]},{"@type":"WebSite","@id":"https:\/\/numpex.org\/fr\/#website","url":"https:\/\/numpex.org\/fr\/","name":"NumPEx","description":"Digital for Exascale","potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/numpex.org\/fr\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"fr-FR"}]}},"acf":[],"_links":{"self":[{"href":"https:\/\/numpex.org\/fr\/wp-json\/wp\/v2\/pages\/997","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/numpex.org\/fr\/wp-json\/wp\/v2\/pages"}],"about":[{"href":"https:\/\/numpex.org\/fr\/wp-json\/wp\/v2\/types\/page"}],"author":[{"embeddable":true,"href":"https:\/\/numpex.org\/fr\/wp-json\/wp\/v2\/users\/3"}],"replies":[{"embeddable":true,"href":"https:\/\/numpex.org\/fr\/wp-json\/wp\/v2\/comments?post=997"}],"version-history":[{"count":15,"href":"https:\/\/numpex.org\/fr\/wp-json\/wp\/v2\/pages\/997\/revisions"}],"predecessor-version":[{"id":4089,"href":"https:\/\/numpex.org\/fr\/wp-json\/wp\/v2\/pages\/997\/revisions\/4089"}],"wp:attachment":[{"href":"https:\/\/numpex.org\/fr\/wp-json\/wp\/v2\/media?parent=997"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}