Phase 1M
This commit is contained in:
parent
0496c4d242
commit
39c72c3b38
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW/cRgyG/4owZ4083x+6GXaLum7qRbxIi95GQ8oWopUWo9GmgbH/PRjtBol7600g9JKchy/5RqZwQNKS2+PxlxNOeSE1ycMWEkwYygxlfM9cy03LXCO5lU7rf0hNhkf8SlpiVYw8eqQSDVIFTNNO9pECoOeMAxNalZzhZSHtGwlDA3gaIjbz8gnTMswTaclfwwTzl1I7DE0c5xWaNI/4MC05TLE08+fD3SP943a3f9pd/lpwKeJmANISMJYzNI468JYqxYB2PQiqteLIHWoX4kU2TBnTFMZmgc8/6sOcJ8yxFY2QDaPCk3NNIORQWu7Cgvuvx9LFhui+xOstvH22b+SEibSi/g7zku4mjsNNno8jnnA8hrRguonz4RAmIDU5pvmIKQ+4YdleOo4hD/NUXYvdjQNOmdTk6bnajSH3czq8Y/V8QfDwPwicMHWkJZJpaaxFJaUM3nSCIVgTjRFdDMz2nUAekWmvrOeWcekF81Ib6ywE5kuml3Huwvj7svHzgnUOmBVGoEIvlDE+MpQOe22RQTCmMy56kM4K5cDJ4EPgvkMbvYnFIB9CfB0mrB7uSUsYRwHSIe0FN1Q5CDRo6akx0vTIo7eCk5rczVMepnVel+phyviSNn6kJb+GccELudsUX4eMMa+pQP3blGK7NMMac/XDAZw1rJGMFdGaj2uuPiIMCWPGgnef1mu+/0iEEZvobk0Jp1ztQn6tfgvLa6ESXOTBl6eaGHvUDHsGLBhmAQ0YBCXAgvIKjPIsGhU6riBo3vUlQmqCxXDV5nEThWGscxSl7qgCkNQF7ymXDHqhe+fxPcfqaSy6EB1TCJJ67IEqzwP1SkoKUgcrTG+t6H9CcjUfZwUw4OmyrZcOAByC4VQorqnynlPntaWddZ3vjEMdS8+PmCYcfwL1YYhpXuY+V1fvVu/QfVyncnGqzcdfhon+u83ofo6fMVVlxmGYyoJdx3quyQHDsiY8bAerfSO7sl3VfrtbQjTKS1WT5xxSXo/XsJaN0uZ8Pp+/AQAA//8DAL7aIIL0BAAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/bOBD9KwLPpkJKFEUK2IPhtFgjTWMk7u5ibxQ5jInIokFRToMi/31BWa6dooe9CaP5ePPeG/5AvdoDatDycPh0hD4OaIGim0IFKTgmHBO6JaKhvCEirymVRFT/ogVyd/CGGlQzramWgEvggJkhFW5Lq7ExICmhhhQVSz3V84CaH0i53MDRacj98BeEwfkeNehv1xv/mmYrl+vOjyYPvoN1P0TV6wTm63p1h78sN9uHzSlrgCEV586gBhleUwJcYGFkjRkjBrfWFLiqGAUqoBJKn8pcHyH0qssH83KZb3zsIeqmyIsyJ7iQ6H2BjIoqQW7VANu3Q0IxUXSb4ospPH02P9ARAmqKxZnMU7sb3bmb/dCOrjM3UYVniDaoPbz68AJH1aEFOgR/gBAdTNw8PGUXSJTkJC94QQhaoHuld66HbH2bPXRpYaUFYWBKLMEazCRVWLKyxKasVF1wW9eFRQt0B6GH7qrrvdPBD97GbKY8+zBn5fvo+tGPQ7buIzwHFU91n1U3AFqgzdh2btg9gjJvW/84pn/92KVdVmMI0Mdso+Iu+1MNO9QgqYSmSiqpFNfaQkXAEkMUJ7UBbjgYVpjaMMkMZ5JozlRLmVEVbW2KoAV6GONhjGf+v1+B2Aa334O5INhOHG86Fa0P+7WBPjrrkjTnjMlQXTdtlc09V52DPn4gGTWIUChMKQDbgnLMhFFYVaXEnJfcAtWyLuiJMOuex588EWsNK20lBG9lSwkUthaM1LYlRttSS1O1UBc1qQUIqQlpK0ZFKzUxQCtm0nbBm1HHX61QTgI9jn26zmyd1n51Pf7O2YWRTfDRa98lwVwHT29DhP3vVFv5/cEPLqb97SzttwHufZ/+zvc/czYXL328xCDdQTadHjChLVUMM2FrzLQlWIlS4lobLaTmrGUFWqBbr18gZMlgyvWTJmdPPTxly6B3LoKOY0iT/5mWOsn5+XwyFz7yr5+2Kx9geTgs5ugfx0TSqdnZAB/elW9DSt/5IW0Rw3jloyfo7BnXlZsMHE8vlUtBbowAwykuGK0wk5JiIasat7VoZcsFVPri1uwRjAug49Rve5o2E/s7Wy5DdFbpOKTb+eL15KbZnnPKryCvVPtZfRp+pdzspLkTJcmxT6d3czLQ/3o239/f3/8DAAD//wMAkF/C9ycGAAA=
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUT2/cNhDFv4rAsyjzP0XdDLtFF27qRbxog94ozigWoqUWFLVpYOx3L6jdInFvuQkDveHjb97wjUR/RNKR+9PplzPGvJCa5HErCSYMZYYyfmBtx03H2kZqYSQzf5OajE/4jXTEqhB4cEglGqQKmKa9HAIFQMcZBya0Kj3954V0b8SPDeB5DNjMy5+YlnGOpCN/jRHmr+VsPzZhmldo0jzhLi7Zx1DM/LF7eKK/3+8Pz/vrXwsuRdyMQDoCxnKGpqUtOEuVYkD7AQTVWnHkLerWh6tsjBlT9FOzwJfv58OcI+bQiUbIhlHhyKUm4LMvlnu/4OHbqbjYED2Wer2Vt8/ujZwxkU7U/8G8trsL03i3rP2EZ5xOPi2Y7sJ8PPoIpCanNJ8w5RE3LGdM/byMuRANwfq25Rxab5W20EotpAXJEFpmNThw3igziKD1AH3rrBoUCK7AoFK9JTXZwE2Tz+Mcq5v3h2nEmElNnl+q/eTzMKfjO/QvV6K7nwBabJOOSKalsRaVlNI70wuGYE0wRvTBMzv0AnlApp2yjlvGpRPMSW1sa8EzVzp98OF1jFjtHklHGEcBskU6CG6oasFTr6WjxkgzIA/OCk5q8jDHPMZ1XpdqFzN+Ttt9SUd+9dOC15vep/A6Zgx5TQXCJ1PCuE8zrCFX3wPAWcMayVgRrfm05uojwpgwZCw4Dmm99fufRBixiR7WlDDmau/za/WbX15JR5xvA/fOO+9NCANqhgMD5g2zgAYMghJgQTkFRjkWjPI9V+A174dSITXBkrdqi3gYQLlgy4oZSVWvgPa9GGiv0QYuuIbwnmP1PBWdDy1TCJI6HIAqxz11SkoKUnsrzGCtGH5AcgsLZwUw4Pm6rJsDA9AiGE6F4poq5zhtnba0t23vetOiDsXzE6aI0w+gPowhzcs85OqWteoduo9rLA9OteXu6xjpP9uMHufwBVNVZuzHWPbrNtZLTY7olzXhcXuvujeyL8tVHbZnS4hGOalq8pJ9yuvpVtayUdpcLpfLvwAAAP//AwCQDjtA8wQAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTTW/UMBD9K9Gc16ntOE6cW7UFsSrQFawAcXM8E2o1dVaOU0DV/nfk7CIoNy6WNfKbeR/jZwj2kaCD6+Px1ROFNMMGkl9LkkvNuGZcHHjbCd0JWbZtY5SSX2ED/pZ+QgeNck44Q6wiTUwhr1lfDY4hkhFcIJe1yj3ttxm6Z7C+RHryjspp/kRx9lOADj77gNP3PNv60o3TgmWcRtqFOdngMpn3u+0te3u9P9ztz69mmjO49AgdoG4EJ92yFk3DlOLI+gElq2slSLRUt9adYT4kisGO5YwPf+bjlAIl18lSViVn0sBpA2iTzZR7O9Ph5zGzWC26yfXNWl6v3TM8UYRObn6beW535UZ/9Tj3ix/x6nwmOz9klcc4HSkmT6snq8xxtMlPobhM2o6eQoIN3H0s9qNNwxQfXxj18ax/9x/yD3n6qx/klkS4nZaQoAOhBGzgnXX3PlCxu4EOuCCJVUtskEIz1aJltq4M07rSAwlnGpkx2ykkH5ZpmYtdSPQtrgKgg9d2nOlM/Tq6e5/IpSVmVV903oV9nHBxqfjjv+AlLyvOM2hJxyUVHwh9JJco6zvE5dLvH4jUcgVtlxgppGJv033xxs730IGxrRPWWGOtdm6gmtPAkVvNGySNmlBJbFAZhVoZ7rSyvVBoa9EPuQIboBx3sW6YrlBKRQ0joxumGj0w2/Ka1a6ukUvVV3J44WNxN2acdS1XhBUzNCBTRlhmVFUxrGrbSD00zYr7bcklfcGzwUhP579yZoDYEmrBpBI1U8YI1pq6YX3T9qbXLdUuc76lGGj8y6h33sVpnoZUXJaneGHdhyXk/16si/TdB/Zjzehmcg8Ui5yx9SGv9yXW0+l0+gUAAP//AwB3KvwmNgQAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRU0W7cKBT9Fes+GwcwxuC3aNJqR9luRu2oW/UNw3WD4uAR4LRRlH9f4ZlVmqfVviB0zbmce87BLxDMI8IA16fThycMOUEN2W8lTrkkVBLKjlQNTA6MN0p1fU/pd6jB3+IzDNALa5nVSFqUSISjHRnbyRLnUDPKHOWdKD3NjwTDCxjfOHzyFpslfcWY/BJggL99cMvPcrfxjZ2X1TVxmXEfUjbBFjJ/7Xe35M/rw/HucD6VMBVw4x0M4GTPKEpFlNM9EYI6Mk6Ok64TDJnCThl7hvmQMQYzN8k9vN3vlhww24E3vG0o4Rpea3Amm0J5NAmPz6fCYpPoptTrrbxthxd4wggDr/8V89zuys7+6jGNq5/d1XnNJj2kbZ2MzUt8hhpOcTlhzB43fa5Twsdxfj6a9PDxfKZs04dfaNeMbresIcMArFVQwybQPJvsl1BdOO5mjyFvH3P0IXn7X71aqOHuS3WYTZ6W+PjOjy9nmff/Q+VPxt77gNX+BgagDLlrFZKJM0mEcoaYrtVEylZOyKzuOYMadkvIPqzLmqp9yPgjbiPBAB/NnPDM7zrae5/R5jWWOb/JkqtDXNxqc/XmJaMNbVpKC2jNpzVXn9H5iDZjGeIY10u/r+8hXPINtFtjxJCrg8n31R8m3cMA2ijLjDbaGGnthB3FiTpqJO0dSifRCe56J7RwUmhqpTAjE850bJxKBWrAEp1qS6swlis9dURaPRJh+o6M1o5komPPuFLj1BYibzpWd3PBGauoQNcSjZMjQjNDtGhb4trO9FxOfc+n3yS55IHRIrDDp/O72xhI5xQ6yQgXrCNCa0aU7noy9mrUo1TY2cL5FmPA+TehPnkbl7RMubokpHon3ec1lH9HtaXlpw/k1+bRzWIfMFbFY+NDeSoXW19fX1//AQAA//8DAIIp/ySCBAAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/jNhD9KwKvFRWSoihSt9TJokaaxFgbbdHbiBzFbGTKoKhkF0H+eyE52XwsCvQiCEPOvMc3b+aJBDggacj58Xj5gCGNJCfJLyHBhKJMUcZ3TDdcNVwU2rBSK/E3yYm/wu+kIbW0lluDtESFVDpW0bbsLHUODWfcMVHJuSbcjaR5IuALhw/eYjGMf2Ac/RBIQ/70wQ2PMzb4wvbD5Io49LgOY4JgZzI369UV/f18s7vdnG6NOM7JhXekIU7VnKHSVDtTUymZo23nBK0qyZFrrDTYU5oPCWOAvhjd/Ru+G1LAZBtRiLJgVBjynBMHCWbKLYy4+36cWSwSXczxfAkvv80TecBIGpG/inkqd2Z7f3YY28n37mz5kpwc43DEmDwuatxuszcSnBWsEEowRnJyDXbvA2bri+y2n58IVjOJrqQGO0el4UCNLEvqygpqobq6Fh3JyRXGgP27qtfexmEcupS9iJx9wNmery4DtD3OGF+gH5HkZD1uEwQH/RDw8hvaKZ1q7eI0H6+GkHyYhmnM1iHhXYSX89f81RQjhpRtIO2z32Dck4YY0JaDAQOgrO2wYtgxx0Cx2qFyCp0UrnbSSKekYVZJaLl0UPG2myMkJ7/OGm4na3Ec39gsJun7hUP20qdV7zGkDzKShjCOwpUaaSe4olI7oFCVhipVqg65NbXgrzA7iHeYSEM63bYts7YV0nALwkDpOlY61Rkh6hpkV1a1FEpVrAbr6lpw6coaLZRdybQgOdnEwU02fW51uTRgE4d/0KZZKtIQxapKW2hboSTXYDRKrqRWBmsjO2CytC3wSkPbcgYVs0YLC1wZkK2ruh8qXYY7H/DCj8cevr/D1YUqyl8sgOYdyE/Xv0Q44OMQ729ONi5uLnckJ1+nMG+EbD1b5NEH+k3NE3099cnv9hHBobseHP7sI5zHJVsmlAkUlbSKMqcZlSUqCpZz2iFjqmSWt3bOuBjsPcZsdhj4ME/Vj2K32+w82r1PaNMUZ35/LTxut9mmh9QN8fBhk7x72GcBClFyNnfG4cNpGy0clXManeJUSF5RaQyn2lQ1bWvdmlZprOys2O2UjlPKvqLzEW1aXvzixQVztUd7/7MYry54sShns9e2py22SPu/lthzTg4I4xTxsGzr5omsQ8C4IF9Mp1Fch2vf935EOwQ3kkZWghVcK/XC8L/vKVMwWern5+fnfwEAAP//AwAzeLKQGwYAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTwY7cKBD9FYuz8QDGGHwb9ewqrUl2WskoWe0NU+U0igdaGE8SjfrfV7g7Sia33NCDV/XqveKFBPuEZCC3p9NfzxjyQmqS/QYJJhRlijL+yPTA1cBFo7XRSvL/SE38PX4nA+mlc9wZpC0qpBJYR8d2chQADWccmOhkqWk/L2R4IdY3gM/eYROXj5gWHwMZyCcfIH4tva1v3BxXaFKccR+WbIMrYv7Z7+7p29vD48Ph8mrBpZAbD2QgoHrOUGmqwfRUSgZ0nEDQrpMcucZOW3eh+ZAxBTs3C3z52R9iDpjdIBrRNowKQ841AZttkTzaBR+/n4qKzaK7gtcbvB2HF/KMiQyi/mHmpdyNm/2Ni09PNsDN5INfjqQmpxRPmLLHzY5twnm22cdQXZvsZo8hk5o8fKgOs81TTE+vPPpwGX3/B5O/s+7oA1b7OzIQxlFAq5FOgisqNVhqu9ZQpVo1IXemF5zUZBdD9mGN61LtQ8bPaVNJBvK3nRe86LtN7ugzurymIv1fVbLGbz7vIhSAkZocUoTV5eqn3Zw1rGlZuXxY82nN1XsEn9BlLDM9pvVa/jeKUGIj7daUMOTqYPOxemOXIxmIsdpxa6yxVjk3YcdwYsCsYj2gAoUgBfQgjQQlDXNK2pFLsB0fp4IU3SXdaluo3ox25I5RbSZDpQSguuOacrBWt1b0QohXtlYPc+FZp5lEaKnBCag03FIj25ZC29leqKnvxfSLJdfEOSt+Az5fvsamQAFoBMWpkLyj0hhOtel6OvZ6NKPS2Lmi+R5TwPkXo955l+ISp1xdF6Z6Zd37NZTvXW3L89UH+m2L7C66L5iqErn1oWzzNeXz+Xz+HwAA//8DAFXn8oElBAAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS6Som2G3qOumXsSLtOhtxBnZQrTSgqI2DYz97wG1GyTurTdhoHdm+Mw788YmOBBr2e3x+MuJprSwkqVhCymhLBeWC7kXTStda1RVW1tL3/zDSjY80lfWMmdCkMET12SJGxQ173QfOCJ5KSQKVZucE14W1r4xGCqk0xCompdPFJdhnljL/homnL/k2jBUYZxXrOI80sO0JJhCbubPh7tH/sftbv+0u/y10JLF1YCsZYRW9p0Q3AVCbpoOOGCN3IL2tledsK67yIYpUZxgrBb8/KM+zmmiFFpVKV0Jrjw7lwwhQW65g4X2X4+5iw3RfY6XW3j7bN/YiSJrVfkd5iXdTRiHmzQfRzrReIS4ULwJ8+EAE7KSHeN8pJgG2rBsLx1HSMM8Fddid+NAU2Ile3oudiOkfo6Hd6yeLwge/geBE8WOtUyLWlvnyGitwdtOCUJng7WqCyBc3ymSgUTtjfPSCam9El7X1jUOQfjASvYyzh2Mvy8bP69E16Bwyioy5JWx1gdBuqG+diQQrO1sEzzqxinTYKPBA0jfkQvehmyQDxBeh4mKh3vWMiFJoW6I90pabhoEDrX23Fpte5LBOyVZye7mKQ3TOq9L8TAleokbP9ayX2Fc6ELuNobXIVFIa8xQ/7a52C7OuIZU/HCAFJWotBBZtKbjmoqPhEOkkCjj3cf1mu8/EmXVJrpbY6QpFTtIr8VvsLxmKtAECT4/1YbQUy2oFyjACodk0RIahQ6NN2iNF8Ea6KRBqGXX5wgrGWXDFZvHmxCEbJTg2iJcF42k4gGdlb3uAIJ/x7F4GrMOQiMMoeaeeuTGS+DeaM1R1+CU7Z1T/U9IruaTIgNGOl22devAIjbZZ1wZWXPjveSNrx3vXNP5zjZUbx08Upxo/AnUhyHEeZn7VFy9W7xD93Gd8sUpNh9/GSb+7zaj+zl8pljkGcMw5QW7jvVcsgPBskY6bAerfWO7vF3Ffrtbqq5qqWTJnhPEtB6vYV1XWtTyfD6fvwEAAP//AwB9Sf0i9QQAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUT2/cNhDFv4rAsyjzP0XdDLtFDTfNIjbaorcRZxQL0UoLito0MPzdC2q3SNxbb8JAb/j4mzd8ZTMciXXs9nT66UxzXlnN8riXlFCOC8eFfBZtJ31nVOOEFcGqv1jNxkf6xjrmTYwyBuKaHHGDwvJeD5EjUpBColDWlJ7weWXdK4OxQTqPkZpl/Z3SOi4z69gf44zL13I2jE2clg2btEz0MK8Z5ljM/PZw98h/vT08fzxc/lppLeJmRNYxQieHXgjuIyE3bQ8c0CJ3oIMbVC+c7y+ycc6UZpiaFb98Px+XPFOOnWqUbgRXgb3VDCFDsdzDSs/fTsXFjui+1Ou9vH92r+xMiXWq/hfmpd1NnMabdesnOtN0grRSuonL8Qgzspqd0nKilEfasZwp9cs65kI0Rg9tKyW24I312GqrtEctCFvhLQYM4IwbVLR2wL4N3gwGlTToyJjes5rt4KYJ8rjM1dX73TTSnFnNPj5VhwnysKTjO/RPF6IP/wNosc06poXVznsyWmsIrleC0LvonOojCD/0imQkYYPxQXohdVAiaOt86xFEiKxmHyC+jDNVD/esY0KSQt0SH5R03LQIHKwO3DntBpIxeCVZze6WOY/ztmxr9TBn+pz2+7KO/QzTSpeb3qb4MmaKeUsFwp+uhPGQFtxirr4HQIpGNFqIItryacvVJ8IxUcxUcDyn7drvPxLl1C6621KiOVcHyC/VL7C+sI4FaKOEAAHAxTiQFTQIFOCER3LoCI1CjyYYdCaI6Az00iBY2Q+lwmpGJW/VHvFBOhVBIxcGFDfDQLwV0vAgWgAysoc+vONYfZyKDmIrDKHmgQbkJkjgwWjNUVvwyg3eq+EHJNewSFEAI50vy7o7cIhtyQVXRlpuQpC8Ddbz3rd96F1LNhYHj5Rmmn4A9WGMaVmXIVfXrFXv0H3a5vLgVHvuvo4z/3uf0f0Sv1CqyoxhnMt+Xcf6VrMjwbolOu7vVffKDmW5quf92VK2sVLJmj1lSHk7XcvaNlpY+fb29vYPAAAA//8DAGVfs2P0BAAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW/jNhCG/4rAs6iQFEV93FKnixrZbIyNuy16G5Ejh4hMGhSVbRD4vy8oO4izix56E0Z85+OZl3wlDvZIOnJ9OPz+jC5OJCfRLiHBhKJMUca3rOl43UlRqFJWrOH/kJzYW3whHaml1ly3SEtUSKVhFe3LQVNjsOWMGyYqmXLCbiLdKwFbGHy2Ggs/fcMwWe9IR/6yzvjvqTbYQo9+NkXwI67dFMHp1MyX9eqWfr7ebO83p1MTTklcWEM6gkbxoWeM1hoNlU0PFExlqIKyVYPomar7k8y6iMHBWEzm6b2+8dFh1J0oRFkwKlpyzImBCKnlHibcvhxSFwuimxTPl/Dy2b2SZwykE/kbzFO6Kz3aq/3Uz3Y0V6Pf7azbrbwb7G4OEFPhnByCP2CIFhc4v1kH4eWz3+1SPvIJxglJTrYY9tbBePpxgwPMY3zwc1jITObpv86QjsAcPcnJQnIcl7LZeZjVaNHFX7QXhe8fss0IcfBh/2FJDyf26/+B/g70o3WYrW9IRxhHYcoG6SC4orIxQKEqW6pUqQbkuq0FJzlZeRetm/08ZWsXcXem9qG/66AfbUQd55Bm+lsls22CN7OO2fuCOStYUTKWRHM8zDH7isYG1BHTENswn/P9JBFKLKJPdsRf8KzmENDFbAPxMfsDpkfSkRYazaGFFkBpPWDFcGCGgWK1QWUUGilMbWQrjZIt00pCz6WBivdDipCcYDJZtvi6VVojlDWtS5HgNoL2VWOo4IzLpi4la4YPcLP7MelAN0yiKWmLg6Gy5UBbWZbUlBXUQg11LYYLTmdDcJaoX5rwzwnN2UtfTtZ+m93g8+keL30qY5pkBCokr6hsW06btqppXzd926sGK50mW3k3+TeQ3zD0frIxPSJ31tk9jD8fed/MLQaH48V27qwOfvJDzM62zD7s6+vs0iuWLRb9bh39dzHGjddPGLJkLLDuYpnH4/H4AwAA//8DAPdjXrgMBQAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUwW7bOBD9FYFnUSElihIF7MFwWqyRpjESd3exN4ocxkRk0aAop0GRf19Qkmun6GFvwogz8+a9N/MD9fIAqEGr4/HTCfowoBQFO4VyknNMOCZ0R+qGVg0rMkIKQqv6X5QiewdvqEEVU4oqAbgADphpUuK2MAprDYISqkleslhTPg+o+YGkzTScrILMDX+BH6zrUYP+tr12r7G3tJnq3Kgz7zrY9EOQvYpgvm7Wd/jLart72M6vBhhicmY1ahBoTk1LCK4UaMzqVmKpS425LAQ3eUt41c5ptg/ge9llg3659Ncu9BBUk2d5kRGcC/SeIi2DjJBbOcDu7RhRTBTdxng6hafP5gc6gUdNnp7JnMvdqM7eHIZ2tJ2+CdI/QzBeHuDV+Rc4yQ6l6OjdEXywMHHz8JRcIFGSkSznOSEoRfdS7W0PyeY2eejiwFLVhIEusACjMRNUYsGKAuuilFXOTVXlBqXoDnwP3VXVe6u8G5wJyUJ58qHP2vXB9qMbh2TTB3j2Msx5n2U3AErRdmw7O+wfQeq3nXsc479+7OIs69F76EOylWGf/CmHPWqQkLWiUkghJVfKQEnAEE0kJ5UGrjlolutKM8E0Z4IozmRLmZYlbU2MoBQ9jOE4hjP/369A7Lw9HEBfEOwmjredDMb5w0ZDH6yxUZrzi8lQXTdNlSw1152FPnwgGTWIUMh1UQM2OeWY1VpiWRYCc15wA1SJKqczYcY+jz95IsZoVpiyrnkrWkogN1XNSGVaopUplNBlC1VekaqGWihC2pLRuhWKaKAl03E67/Sowq9WKCaBHsc+bmeyiWO/2h5/5+zCyNa74JTromC2g6e3IcDhd6qt3eHoBhvi/GaR9tsA966Pf5f9XzhbklcuXGIQ9yCZVq+VUAsiWqyKimHGCo5bCQTzStVEVXmeG4VSdOvUC/gkGkzaftLk7KmHp2Tl1d4GUGH0sfM/01CznJ/PK3PhI/v6abd2HlbHY7pE/zhFkuZiZwN8uCvfhvh874Y4RfDjlY+eoDNnXFdu0nCaL5WNQa51Ha8MzhktMROC4lqUFW6ruhUtr6FUF7cmj6CtBxWmeru520Ls72y58sEaqcIQd+eLU5ObFnsuT34FeaXaz+y5+ZVyi5OWSpRExz7Nd3My0P86m+/v7+//AQAA//8DACUyB6cnBgAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTTW/cNhD9KwLPS5mkKFLUzVin6MJNvUgWbdHbiDOKCcvUgqKcBIb/e0HtFk5664UgBnwz72P4yiI8E+vZ7fn84YViXtiO5bCVlFCGC8OFPImul7bXtm6dUMq6v9mOhXv6znpmtffSO+INGeIaRcuHZvQckZwUEoVqdekJXxbWvzIINdJL8FTPyx+UljBH1rM/Q8T5a5kNofbTvGKd5okOcckQfSHz+2F/z3+7PZ4ejpdXCy0FXAdkPSM0chyE4NYTct0NwAFb5AYaZ0Y1CGOHCyzETCnCVC/49D4f5xwp+17VqqkFV4697RhChkJ5gIVO38+FxWbRXanvtvJ27V/ZCyXWq92/Zl7a3fgp3DwvwxomvLmcGZanovKc5jOlHGjzZJM5TZDDHKvrpP0UKGa2Yw+fq+MEeZzT809Gfb7oP/wP+acy/cM38msm3M9rzKxnUku2Yx/BP4ZI1eGO9UxIUth0xEclDdcdAoe2cdyYxowkvbOqYPZzzCGu87pUh5jpS9oEsJ79AtNCF+q3yT+GTD6vqaj6y5RdOKYZV5+rd/+lqEXdCFFAaz6vufpEGBL5TEXfKa3Xfv+BKKM20H5NiWKujpAfq19heWQ9c9B5CQ4cgPF+pFbQKFCAERbJoCHUCi1qp9FoJ7zRMEiN0MphLBW2Y1TirrYNE9ZJbTvLSUnHNYLlTg3ArTWeCIVzWIi8+1g9TAUHvhOasOGORuTaSeBONw3HpgWrzGitGn+w5Jq+FMVgpJfLX9kYGMSuBM2Vli3XzkneudbywXaDG0xHrS+c7ylFmn4w6mPwaV7mMVfX5al+su7TGst/r7ZF+hoi/7ZldDf7J0pVyRhCLOt9jfXt7e3tHwAAAP//AwDJ0IwBNgQAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTwW7bOBD9FYFnUSEpihJ1C5xd1Ei7MdqgXextxBnVRBXKoKi0ReB/X1B20aa33ohHvpk37w1fWIAnYj27PZ3+eqaQFlay5DdICWW4MFzIR9H1su11WzVWdVqJ/1jJ/D19Zz1rtXPSWeI1GeIaRcOHenQckawUEoVqdK4JnxfWvzDwFdKzd1TNy0eKi58D69knH3D+mnuDr9w0r1jFeaJ9WBIEl8X8s9/d87e3h8eHw+XVQksmVx5ZzwiNHAcheOsIue4G4IANcgO1NaMahGmHC82HRDHAVC345Wd/nFOg5HpVqboSXFl2LhlCgix5gIUev5+yis2iu4yXG7wd+xf2TJH1qvxh5qXcjZv8jZufniDgzeiDX46sZKc4nygmT5sd24TTBMnPobg22U2eQmIle/hQHCZI4xyfXnn04TL6/g8mfwfu6AMV+zvWMyFJYd0RH5U0XHcIHJracmNqM5J0tlWSlWw3h+TDOq9LsQ+JPsdNJevZ3zAtdNF3G93RJ3JpjVn6vyZnTd982s2YAcFKdogzri4VP+2WohJVLfLlw5pOayreE/pILlGe6TGu1/K/UZRRG2m3xkghFQdIx+INLEfWMwudk2DBAhjnRmoEjQIFGNEiGTSEWmGL2mo02gpnNAxSIzRyGDOSded0i22hwOihHYThjRuA604PHFqpuTbWNZ3WtZXqla3Fw7TxXCc0Yc0tjci1lcCtrmuOdQOtMmPbqvEXS66JS5H9Rnq+fI1NgUHscrhcadlwba3knW1aPrTdYAfTUeOy5nuKgaZfjHrnXZyXeUzFdWGKV9a9X0P+3sW2PF994N+2yO5m94VikSMHH/I2X1M+n8/n/wEAAP//AwA4KzhMJQQAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRUwW7cNhD9FYFnUSYlihJ1M9YJunBTL5JFGuQ24oxiwjK1ICknhuF/L6jdwvGp6IUgRnzDN+896oV5eCQ2sOvT6cMT+RRZyZLbSrWoNReaC3kU/SC7QXVV23ddI8V3VjJ3S89sYJ2yVlpDvCFNXKFo+dhMliOSkUKiqFuVe8KPyIYXBq5CenKWqiV+pRDd4tnA/nYel5/5bnCVnZcVq7DMtPcxgbeZzF/73S3/8/pwvDucT0WKGVw5ZAMj1HIaheCdJeSqH4EDtsg1NEZP9Sh0N55hzicKHuYq4sPb/bgkT8kOdVU3leC1Ya8lQ0iQKY8Q6fh8yiw2iW5yvdzK23Z4YU8U2FCX/4p5bndlZ3f1GMfVzXh1XhPEh7itE9i0hGdWslNYThSSo02f6xjpcZyfjxAfPp7P5G388Ivsmgh3y+oTG5hselayTaB5huQWX1w47mZHPm0fU3A+OvtfvRpWsrsvxWGGNC3h8Z0fX84y7/+Hyp/A3jtPxf6GDUxIqrHpiU+11Fz1CBzaxnCtGz2RtKarJSvZbvHJ+XVZY7H3iX6EbSQ2sI8wRzrzuw723iWyaQ15zm865+oQFlxtKt68lKISVSNEBq3ptKbiM6ELZBPlIY5hvfT7+h5S63oD7dYQyKfiAOm++APiPRuYgd5KMGAAtLUTtYImgQK06JA0akJVY4fKKNTKCKsVjFIhtHKccoWVjHJ0ii2tPUHb2ElzM0rJVYcNH7EGjgCd0FMPasyjvelY3M0ZB7YXirDhhibkykjgRjUNx6aFrtZT19XTb5Jc8iBFFhjp6fzuNgYasc9u8lrJlitjJO9N2/Gx60cz6p5amznfUvA0/ybUJ2fDEpcpFZeEFO+k+7z6/O8otrT8dJ7/2jy6WewDhSJ7DM7np3Kx9fX19fUfAAAA//8DALXdmSSCBAAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS/zQzbBb1HVTL+JFWvQ2JEe2EK20oKhNA2P/e0DtBol7600YaGZePvPOvJEJDkg6cns8/nLCKS+kJnnYQoIJTZmmjO+Z7bjtmGu4MIIr8Q+pyfCIX0lHjAqBB4dUokaqImupl32gMaLjjEcmWlVqwstCujcCQxPxNARs5uUTpmWYJ9KRv4Ypzl9KbxiaMM5rbNI84sO0ZJhCEfPnw90j/eN2t3/aXf5acCnJzRCLVO0db7mngclNRE8dj0CjaNtoZKtAi0vaMGVME4zNEj//6B/nPGEOnWiEbBgVjpxrEiFDkexhwf3XY1GxIbov8XoLb5/dGzlhIp2ov8O8lLsJ43CT5+OIJxyPkBZMN2E+HGCKpCbHNB8x5QE3LNtLxxHyME/VtdndOOCUSU2enqvdCLmf0+Edq+cLgof/QeCEyZOOSNZKbQwqKSU47QXDaHTQWvgAzPReIA/IWqeM44Zx6QRzstXGmgjMBVKTl3H2MP6+bPycYN5GZoQWqNAJpbULDKXFvjXIImjttQ0uSmuEstFKcADceTTB6VAM8gHC6zBh9XBPOsI4iigt0l5wTZWNQKGVjmotdY88OCM4qcndPOVhWud1qR6mjC9p40c68iuMC17I3abwOmQMeU0F6t+6NNulOa4hVz8cwFnDGslYSVrzcc3VR4xDwpCx4N2n9VrvPylCiy3pbk0Jp1ztIL9Wv8HyWqiADRxceaoOoceWYc8iA81MRB01RiWiicqpqJVjQSvwXEVoue9LhNQEi+GqzeMWTBDSSSrAOKo0s9QLj9RLq4D3HgK851g9jSUPgmUKo6QO+0iV40CdkpJG2YIRujdG9D8huZqPswI44umyrZsCHaPFqDkVirdUOcepda2h3ljvvLbYhqL5EdOE40+gPgwhzcvc5+rq3eoduo/rVC5Otfn4yzDRf7cZ3c/hM6aqzBiGqSzYdaznmhwQljXhYTtY3RvZle2q9tvdErwxzLqaPGdIeT1ew1I0znB1Pp/P3wAAAP//AwCSsevS9QQAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/bOBD9KwLPokJS1AcF7MFwWqyRpjESd3exN4ocxkRk0aAop0GR/76gJNdO0cPehNF8vHnvDX+gXh4ANWh1PH46QR8GlKJgpxAjrMSkxITuSN3QuiEiK6goRFX/i1Jk7+ANNajiSlElAOdQAuaaFLjNjcJag6CEasIKHnvK5wE1P5C0mYaTVZC54S/wg3U9atDfttfuNc6WNlOdG3XmXQebfgiyVxHM1836Dn9ZbXcP2zlrgCEWZ1ZHqGUraEFbrEg+gTBYUC2xZkWhq7zgsmRzme0D+F522aBfLvO1Cz0E1bCM5RnBTKD3FGkZZITcygF2b8eIYqLoNsbTKTx9Nj/QCTxqWHomc253ozp7cxja0Xb6Jkj/DMF4eYBX51/gJDuUoqN3R/DBwsTNw1NygURJRjJWMkJQiu6l2tseks1t8tDFhaWqCQedYwFGYy6oxILnOdZ5IStWmqpiBqXoDnwP3VXXe6u8G5wJyUJ58mHO2vXB9qMbh2TTB3j2Msx1n2U3AErRdmw7O+wfQeq3nXsc479+7OIu69F76EOylWGf/CmHPWqQkLWiUkghZamUgYKAIZrIklQaSl2C5kxXmguuSy6IKrlsKdeyoK2JEZSihzEcx3Dm//sViJ23hwPoC4LdxPG2k8E4f9ho6IM1NkpzzpgM1XXTVsnSc91Z6MMHklGDCAWm8xqwYbTEvNYSyyIXuCzz0gBVomJ0JszY5/EnT8QYzXNT1HXZipYSYKaqOalMS7QyuRK6aKFiFalqqIUipC04rVuhiAZacB23806PKvxqhXwS6HHs43Umm7j2q+3x95JfGNl6F5xyXRTMdvD0NgQ4/E61tTsc3WBD3N8s0n4b4N718e9y/wtnS/HKhUsM4h0k0+mpvFVVWzGsas4xb3OBhWoZrkUlWKFl3kK8llunXsAn0WDS9pMmZ089PCUrr/Y2gAqjj5P/mZaa5fx8PpkLH9nXT7u187A6HtMl+scpkjQ3Oxvgw7vybYjpezfELYIfr3z0BJ0547pyk4bT/FLZGCy1rkGXFDNOC8yFoLgWRYXbqm5FW9ZQqItbk0fQ1oMKU7/dPG0h9ne2XPlgjVRhiLfzxanJTYs9l5RfQV6p9rN6Hn6l3OKkpRMl0bFP87s5Geh/PZvv7+/v/wEAAP//AwB74N4kJwYAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRUwW7jNhD9FYFnUSEpiRJ1S50uamSzMTbutuiN4owcIjJpUFS2QeB/X1B2EGcXPfQmjPhm3rz3yFfi9B5JR64Ph9+f0cWJ5CTapSSYkJRJyviWtR1vO6YK3taKSf4PyYm9xRfSkaYyhhuFtESJtAJW074cDAVAxRkHJuoq9dS7iXSvRNsC8NkaLPz0DcNkvSMd+cs68N/TbG0LM/oZiuBHXLspamcSmS/r1S39fL3Z3m9OpyacEriwkKjKXvGa99SwciExUMVBUxB1DU1ZV1qKE8y6iMHpsZjg6X0++Ogwmk4UoiwYFYoccwI66kS51xNuXw6JxSLRTarnS3n57F7JMwbSifxNzFO7KzPaq/3Uz3aEq9HvdtbtVt4NdjcHHdPgnByCP2CIFhdxfrNOh5fPfrdL/cgnPU5IcrLFsLdOj6cfNzjoeYwPfg6LMhM8/dcZ0hE9R09ysig5jsvY7LzMarTo4i/Yi8H3D9lm1HHwYf/BpIeT9uv/If2dNo/WYba+IR1hHAWULdJBcEmrFjTVdamolKUckBvVCE5ysvIuWjf7ecrWLuLurNoHftfBPNqIJs4h7fS3TGHbBA+zidm7wZwVrCgZS6A5HuaYfUWwAU3EtMQ2zOd+P0GEFAvokx3xF3lWcwjoYrbR8TH7Q0+PpCNKt4ZrpZXW0pgBa4YDA6YlawAlSIRKQAOVqkBWihlZ6Z5XoGveD6lCcoIpZNmS6x5kDQicctn0tBJoaN8C0KrhopRSaibhg7jZ/Zhw2rSsQiipwgFopbimqipLCmWtGyGHphHDhU7nQHCWVL8M4Z8TwjlLX07Rftsd8Pl0jxeeEqBFkJyKite0UorTVtUN7Zu2V71ssTZps5V3k38T8huG3k82pkfkzjq71+PPR96ducXgcLxw586a4Cc/xOwcy+yDX19nl16xbInod+vov0swbrx5wpClYGnrLsw8Ho/HHwAAAP//AwAfRIPiDAUAAA==
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUT2/cNhDFv4rAsyjzP0XdDLtFDTfNIjbaorcRZxQL0UoLito0MPzdC2q3SNxbb8JAb/j4mzd8ZTMciXXs9nT66UxzXlnN8riXlFCOC8eFfBZtJ9tOhEY65Vtl/2I1Gx/pG+uYNzHKGIhrcsQNCst7PUSOSEEKiUJZU3rC55V1rwzGBuk8RmqW9XdK67jMrGN/jDMuX8vZMDZxWjZs0jLRw7xmmGMx89vD3SP/9fbw/PFw+WultYibEYtV1wdpZc+j0LuJgQeJwFFZi15bA05dZOOcKc0wNSt++X4+LnmmHDvVKN0IrgJ7qxlChmK5h5Wev52Kix3RfanXe3n/7F7ZmRLrVP0vzEu7mziNN+vWT3Sm6QRppXQTl+MRZmQ1O6XlRCmPtGM5U+qXdcyFaIwe2lZKbMEb67HVVmmPWhC2wlsMGMAZN6ho7YB9G7wZDCpp0JExvWc128FNE+Rxmaur97tppDmzmn18qg4T5GFJx3fony5EH/4H0GKbdUwLq533ZLTWEFyvBKF30TnVRxB+6BXJSMIG44P0QuqgRNDW+dYjiBBZzT5AfBlnqh7uWceEJIW6JT4o6bhpEThYHbhz2g0kY/BKsprdLXMe523Z1uphzvQ57fdlHfsZppUuN71N8WXMFPOWCoQ/XQnjIS24xVx9D4AUjWi0EEW05dOWq0+EY6KYqeB4Ttu1338kyqlddLelRHOuDpBfql9gfWEdC9BGCQECgItxICtoECjACY/k0BEahR5NMOhMENEZ6KVBsLIfSoXVjEreqj3iAFZI0Ja3WgE3PiIPLbW8d857EBCGIN5xrD5Ouy62whBqHmhAboIEHozWHLUFr9zgvRp+QHINixQFMNL5sqy7A4fYEjrJlZGWmxAkb4P1vPdtH3rXko3F8yOlmaYfQH0YY1rWZcjVNWvVO3Sftrk8ONWeu6/jzP/eZ3S/xC+UqjJjGOeyX9exvtXsSLBuiY77e9W9skNZrup5f7aUbLxoQ82eMqS8na5lrZrgpXl7e3v7BwAA//8DAEKX/830BAAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRUTW/cNhT8KwLPoswvUaJuxjpBF27qRbJIi94ovqeYsEwtSMqJYex/L6jdIvGp6IUgnjiP82aGeiPBPiMZyO3p9OEFQ06kJtlvJcGEpkxTxo+sH3g/cNVwKbTu+d+kJv4eX8lAOuUcdwapRI1UAWvpKCdHAdBwxoGJVpWe9lsiwxuxvgF88Q6bJX3FmPwSyED+9AGW7+Vu6xs3Lys0cZlxH1K2wRUyf+x39/T328Px4XA5lTAVcOOhUNWj4S0fqWNyIzFRw8FSEG0LnWyV1eIC8yFjDHZuEjz9vB+WHDC7QTRCNowKQ841AZttoTzahMfXU2GxSXRX6vVW3rbDG3nBSAZR/yvmpd2Nm/3NcxpXP8PNZc02PaVtnazLS3wlNTnF5YQxe9z0uU0Jn8f59WjT08fLmbJNH36gWzPCbllDJgPhsic12QSaZ5v9Eqorx93sMeTtY44+JO/+q5ckNXn4Uh1mm6clPr/z48tF5v3/UPmTdY8+YLW/IwNhHAXIHukkuKaqB0ttKw3VWuoJuTOd4KQmuyVkH9ZlTdU+ZPwWt5HIQD7aOeGF3210jz6jy2ssc/6lS64OcYHV5eqnl5w1rJGMFdCaT2uuPiP4iC5jGeIY12u/r+8hQosNtFtjxJCrg82P1W82PZKBGNs7bo011mrnJmwZTgyY1awD1KARlIAOlFGglWFOKztyBbbl41QqpCZYolNtaUXrWsU6R+XYS6qMsrR3XNBOShBGtcClfqdj9TAXnHU9UwiSGpyAKsMtNUpKCrK1ndBT14npF0mueeCsCAz4cnl3GwMN0CNoToXiLVXGcNqbtqNj149m1D22rnC+xxhw/kWoT97FJS1Trq4Jqd5J93kN5d9RbWn57gP9sXl0t7gnjFXx2PpQnsrV1vP5fP4HAAD//wMAGpaA+4IEAAA=
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/cNhD9KwKvXcr8Einq5toOunAdG9lFW/Q2Ikc2a5laUJSTwPB/L6i1EztBgV4EYUjOe/PmzTyRCA9IOnJ6OFw8Yswz2ZAc1pBgQlOmKeN71na87biquWwbpfTfZEPCJX4lHTHKOe4sUokaqfKsob0cHPUeLWfcM9GokhNuZ9I9EQi1x8fgsJ7mPzDNYYqkI3+G6KfPBRtC7cZp8XWaRtzGOUN0hczH7dkl/f30Zn99c7w141we18EXqrq3vOE9dUyuJAZquQfqRdN4IxsFWhyfhZgxRRjr2d9/x/dTjphdJ2oha0aFJc8b4iFDodzDjPuvh8Jilei8xDdreP3tnsgjJtKJzauYx3QnbgwnD3O/hNGfrF+yIYc0HTDlgKsa17vqOwnOalYLLRgjG3IF7i5ErLbn1fVYSgTXMoVeUouDp8pyoFZJSb1swAg9GCMGsiGXmCKOb7JeBZemeRpy9SJy9Q5nd3p2EaEfsWB8gHFGsiHbeZchehiniBdf0C35mGuflnJ8NsUc4jItc7WNGW8TvJy/vj9bUsKYqxvId9VvMN+RjlhoHQcLFkA7N2DDcGCegWbGo/YavRLeeGWV18oypxX0XHloeD+UCNmQX4uGu8U5nOfvbFaTjOPKoXrp09kYMOZ3MpKOMI7CyxbpILimqvVAoZGWai31gNxZI/grzB7SLWbSkaHt+5451wtluQNhQfqBSa8HK4QxoAbZGCW0bpgB540RXHlp0IEcJGuL7W7S5BeXf2y1XBtwk6Z/0OUiFemIZk3TOuh7oRVvwbaouFattmisGoAp6XrgTQt9zxk0zNlWOODagup9M3xT6SLehojnYT6M8PUNblvrWv7iAFo+gPrh+ocED/h5SvcfjzauP17syYZ8WmLZCNW2WORziPSLLhN9tYw57O8Sgkd/NXn82UdYxqVaJ9QraZVhjlpjkCrrOO0lADUWemNK0UMZqvPJ3WOqisMgxDJV35Jd76rT5O5CRpeXVPj9tfK43lU3I+RhSg/vNsmbwn4UoBaSs9IZj4/HbbRy1N636DWnQvGGKms5bW1jaG/a3va6xcYVxa6XfFhy9Ql9SOjyWvGLF1fMszt09z+L8eqCF4tyVry2O26xVdr/tcSeN+QBYV4SPqzbunsi2xgxrcjny3EUt/EqjGOY0U3Rz6RTVrNaq0a+MPyvew1jpm6sFM/Pz8//AgAA//8DAJAvYc0bBgAA
|
||||
@ -1,5 +0,0 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTyW7bMBD9FYFnU+EmStQtcFrUSNsYidEWvVGcUU1EoQyKyoLA/15QdtCmt14IYsA385bhKwn2AUlLLg+HD48Y0kRWJPmlJJjQlGnK+I41LW9arkouK6mb6idZEX+NL6QltXKOO4NUokaqgFW0k72jAGg448BEpXJP+2si7SuxvgR89A7LcfqGcfJjIC357gOMT3m29aUbxhnKOA64CVOywWUyXzfra/r5cru72Z5eTThlcOkhU9Wd4RXvqGNyIdFTw8FSEFUFtayU1eIE8yFhDHYoJ7j/Mx/GFDC5VpRClowKQ44rAjbZTLmzE+5eDpnFYtFVrq+W8nJtX8kjRtKK1ZuZp3YXbvAXD1M3+wEuTmey031WeYjjAWPyuHiyyBwGm/wYivOk9eAxJLIiN3fFdrCpH+PDO6PuTvo3/yF/l6d/eEY3J4T1OIdEWsIVJyvyxbq9D1hsrkhLGEcBskHaC66pasBSW0lDtZa6R+5MLTJmPYbkwzzOU7EJCX/FRQBpyUc7THiifhnd3id0aY5Z1Q+dd2EbR5hdKv74z1nJSslYBs3pMKfiFsFHdAmzvl2cz/3+gQgtFtB6jhFDKrY27YtPdtqTlhjbOG6NNdZq53qsGPYMmNWsBtSgEZSAGpRRoJVhTivbcQW24l2fK2RFMMddLBumK5CubhzVtZNUMe5o5zpHXd9YxVhTC96/87G4GTLOuoYpBEkN9kCV4ZYaJSUFWdla6L6uRca9WXJOn7NsMODj6a+cGAA0CJpToXhFlTGcNqaqaVc3nel0g5XLnK8xBhz+MuqLd3Gcxj4V5+Up3ll3O4f834tlkZ58oM9LRleju8dY5IytD3m9z7Eej8fjbwAAAP//AwBleZTlNgQAAA==
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUT2/cNhDFv4rAsyjzP0XdDLtFF27qRbxog94ozigWoqUWFLVpYOx3L6jdInFvuQkDveHjb97wjUR/RNKR+9PplzPGvJCa5HErCSYMZYYyfmBtp3SnVaM1Z8aIv0lNxif8RjpiVQg8OKQSDVIFTNNeDoECoOOMAxNalZ7+80K6N+LHBvA8Bmzm5U9MyzhH0pG/xgjz13K2H5swzSs0aZ5wF5fsYyhm/tg9PNHf7/eH5/31rwWXIm5GIB1BUINzwdEh9J6qngvaKmkoE0y5oHpttbvKxpgxRT81C3z5fj7MOWIOnWiEbBgVjlxqAj77Yrn3Cx6+nYqLDdFjqddbefvs3sgZE+lE/R/Ma7u7MI13y9pPeMbp5NOC6S7Mx6OPQGpySvMJUx5xw3LG1M/LmAvREKxvW86h9VZpC63UQlqQDKFlVoMD540ygwhaD9C3zqpBgeAKDCrVW1KTDdw0+TzOsbp5f5hGjJnU5Pml2k8+D3M6vkP/ciW6+wmgxTbpiGRaGmtRSSm9M71gCNYEY0QfPLNDL5AHZNop67hlXDrBnNTGthY8c4HU5IMPr2PEavdIOsI4CpAt0kFwQ1ULnnotHTVGmgF5cFZwUpOHOeYxrvO6VLuY8XPa7ks68qufFrze9D6F1zFjyGsqED6ZEsZ9mmENufoeAM4a1kjGimjNpzVXHxHGhCFjwXFI663f/yTCiE30sKaEMVd7n1+r3/zySjrifBu4d955b0IYUDMcGDBvmAU0YBCUAAvKKTDKsWCU77kCr3k/lAqpCZa8VVvEpfZMDcFSBBRUSSGoM85Q21vVS66Z0/07jtXzVHQ+tEwhSOpwAKoc99QpKSlI7a0wg7Vi+AHJLSycFcCA5+uybg4MQItgOBWKa6qc47R12tLetr3rTYs6FM9PmCJOP4D6MIY0L/OQq1vWqnfoPq6xPDjVlruvY6T/bDN6nMMXTFWZsR9j2a/bWC81OaJf1oTH7b3q3si+LFd12J4toRvWaleTl+xTXk+3sjRNy5W6XC6XfwEAAP//AwBRE7MW9AQAAA==
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTTW/cNhD9K8KcRZmkKErUzVin6MJNvEgWadEbxRnFhGVqQVFOAmP/e0DtBk5664UgBnwz72P4CsE+E/Rwezq9e6GQFigh+a0kudSMa8bFkXe9avqmqVrdSNmZf6EEf0/foYdWOSecIVaTJqaQN2yoR8cQyQgukMtG5Z72ywL9K1hfIb14R9W8fKa4+DlAD3/7gPPXPNv6yk3zilWcJ9qHJdngMpkP+909++v2cHw4XF4ttGRw5RF6IFSjMc6w0Q2WqUFI1qlaMy65Mk4NTduYC8yHRDHYqVrw6W0+zilQcr2sZF1xJg2cS0CbbKY82IWO30+ZxWbRXa6XW3m79q/wQhF6Wf4089Luxk3+5nkZVj/hzeVMdnnKKk9xPlFMnjZPNpnTZJOfQ3GdtJs8hQQlPHwqDpNN4xyffzPq00X//n/IP+bp776RWxPhbl5Dgh6EqqGE99Y9+kDF/g564IIk1h2xUQrNVIeW2aY2TOtajyScaaWAEnZzSD6s87oU+5DoS9wEQA9/2GmhC/Xb6B59IpfWmFX9o/MuHOKMq0vFm/+CV7yqOc+gNZ3WVHwk9JFcoqzvGNdrv/9ApJYbaLfGSCEVB5seiz/t8gg9GNs5YY011mrnRmo4jRy51bxF0qgJlcQWlVGoleFOKzsIhbYRw5grUALluIttw4xsbK1oYLWqiSmjLRsai2xUynU06lFhpvjmY/EwZZx1HVeENTM0IlNGWGZUXTOsG9tKPbatHH+x5Jq+4NlgpJfLX9kYaMSOUAsmlWiYMkawzjQtG9puMIPuqHGZ8z3FQNMvRr33Ls7LPKbiujzFb9Z9XEP+78W2SF99YN+2jO5m90SxyBlbH/J6X2M9n8/nHwAAAP//AwCu1fIaNgQAAA==
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUUW/cKBDHv4o1z8YBDNj4Ldq0ulWul1W76lV9wzBuUBy8Apw2ivLdT3j3lObpdC8IjZnhP7/54xcI5hFhgOvT6cMThpyghuy3EKdcEaoIZUfaD0IOUjadarns6Heowd/iMwzQCWuZ1UhaVEiEo5KM7WSJc6gZZY5yKUpN8yPB8ALGNw6fvMVmSV8xJr8EGOBvH9zys9xtfGPnZXVNXGbch5RNsEXMX/vdLfnz+nC8O5xPJUwlufEOBkAnJq2tJpMdDREj46QXrSKUU6GtGGUn9TnNh4wxmLlJ7uHtfrfkgNkOvOFtQwnX8FqDM9kUyaNJeHw+FRUbopsSr7fwth1e4AkjDLz+F+a53JWd/dVjGlc/u6vzmk16SNs6GZuX+Aw1nOJywpg9bnyuU8LHcX4+mvTw8XymbNOHX2jXjG63rCHDAExQqGEDNM8m+yVUF4272WPI28ccfUje/letFmq4+1IdZpOnJT6+m8eXM+b9/6D8ydh7H7Da38AAlCF3bY9k4kwR0TtDjGw1UapVEzKrO86ght0Ssg/rsqZqHzL+iFtLMMBHMyc867uO9t5ntHmNpc9vqvjqEBe32ly9zZLRhjYtLXju1nxac/UZnY9oM5YmjnG91Pv6PoUrviXt1hgx5Opg8n31h0n3MIA2vWVGG22MsnZCSXGijhpFO4fKKXSCu84JLZwSmlolzMiEM5KNU4lADVisU13cagRDKoidOBIhu5b0rZBEIleCtd2IujB541jdzSXP2J4KdC3RODkiNDNEi7YlrpWm42rqOj79huTiB0ZLMYdP53e3KVDO9egUI1wwSYTWjPRadmTs+lGPqkdpi+ZbjAHn30B98jYuaZlydXFI9Q7d5zWUf0e1ueWnD+TXNqObxT5grMqMjQ/lqVzG+vr6+voPAAAA//8DAEU35m+CBAAA
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTwY7cKBD9FYuz8QDG2Pg26tlVWpPstJJREuWGqSKN4oEWxpNEo/73Fe6OJtnb3tCDV/XqveKFBPOEZCS3p9NfzxjyQmqS/QYJJhRlijL+yIZRdmPXNb3qpeT8C6mJv8efZCS9tJZbjbRFhVQC6+jUOksBUHPGgYlOlprm60LGF2J8A/jsLTZx+Yhp8TGQkXzyAeL30tv4xs5xhSbFGfdhySbYIuaf/e6evr09PD4cLq8WXAq58UBGgiCd1lZTZydD5cQFHWSrKBNMaiunru/0heZDxhTM3Czw7bU/xBww21E0om0YFZqcawImmyJ5Mgs+/jwVFZtFdwWvN3g7ji/kGRMZRf3LzEu5Gzv7GxufnkyAG+eDX46kJqcUT5iyx82ObcJ5NtnHUF2b7GaPIZOaPHyoDrPJLqanPzz6cBl9/z8mf2fs0Qes9ndkJIyjgHZA6gRXVA5gqOlaTZVqlUNudS84qckuhuzDGtel2oeMX9OmkozkbzMveNF3m+zRZ7R5TUX6Z1Wyxh8+7yIUgJGaHFKE1ebq1W7OGta0rFw+rPm05uo9gk9oM5aZHtN6Lf8filBiI+3WlDDk6mDysXpjliMZiTaD5UYbbYyy1mHH0DFgRrEeUIFCkAJ6kFqCkppZJc3EJZiOT64gRXdJt9oWSnVMOdVJ2pvWUolOUdNDT7mQEzrVT0wXi15trR7mwjN2YBKhpRodUKm5oVq2LYW2M71Qru+F+82Sa+KclWKAz5evcVEAMCAoToXkHZVaczrorqdTP0x6UgN2tmi+xxRw/s2od96muESXq+vCVH9Y934N5XtX2/J894H+2CK7i/YbpqpEbnwo23xN+Xw+n/8FAAD//wMAC1T6KCUEAAA=
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/jNhD9KwKvFRWSoihRt9TJokaaxFgbbdHbiBzGbGTKoKhkF0H+eyE52XwsCvQiCENy3ps3b+aJBDggacn58Xj5gCGNJCfJLyHBhKJMUcZ3rGll1VZVUau6akr+N8mJv8LvpCW1NIYbjbREhVRaVtGudIZai5ozbpmo5JwT7kbSPhHwhcUHb7AYxj8wjn4IpCV/+mCHxxkbfGH6YbJFHHpchzFBMDOZm/Xqiv5+vtndbk63Rhznx4W3pCVopdPaaOpMB1R2XNBGlooywaQ2sqvqSp+e+ZAwBuiL0d6/4dshBUymFYUoC0aFJs85sZBgptzBiLvvx5nFItHFHM+X8PLbPpEHjKQV+auYp3Rnpvdnh7GbfG/Pli/JyTEOR4zJ46LG7TZ7I8FZwQqhBGMkJ9dg9j5gtr7Ibvu5RDANk2hLqtFZKjUHqmVZUltWUAvl6lo4kpMrjAH7d1mvvYnDOLiUvYicfcDZnq8uA3Q9zhhfoB+R5GQ9bhMEC/0Q8PIbmimdcu3iNB+vhpB8mIZpzNYh4V2El/PX96spRgwp20DaZ7/BuCct0dAYDho0gDLGYcXQMctAsdqisgqtFLa2UkurpGZGSei4tFDxzs0RkpNfZw23kzE4jm9sFpP0/cIhe+nTqvcY0gcZSUsYR2HLBqkTXFHZWKBQlZoqVSqH3Oha8FeYHcQ7TKQlrum6jhnTCam5AaGhtI6VVjktRF2DdGVVS6FUxWowtq4Fl7as0UDpStYIkpNNHOxk0udWl0sDNnH4B02apSItUayqGgNdJ5TkDegGJVeyURprLR0wWZoOeNVA13EGFTO6EQa40iA7W7kfKl2GOx/wwo/HHr6/w20KVZS/GICGO5Cfrn+JcMDHId7fnGxc3FzuSE6+TmHeCNl6tsijD/Sbmif6euqT3+0jgkV7PVj82Uc4j0u2TKjmtdVOM4qWSyqbzlGw3FEHElinWKNxtu/FYO4xZrPDwId5qn4ku91m59HsfUKTpjjz+2vhcbvNNj0kN8TDh03yrrDPAhSi5GzujMWH0zZaOCprG7SKUyF5RaXWnDa6qmlXN53uVIOVmRW7ndJxStlXtD6iSUvFL15cMFd7NPc/i/HqgheLcjZ7bXvaYou0/2uJPefkgDBOEQ/Ltm6fyDoEjAvyxXQaxXW49n3vRzRDsCNpOde8aGRdvjD8z3tClkWtuHh+fn7+FwAA//8DANjfCysbBgAA
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSU227jNhCGX0XgtanwJOpwlzpd1MhmE2zcbdG7ETlyiMikQVHZBoHffUHZQZJd9KJ3woj/HL75yRfiYY+kI5eHw+9P6NNEViS5JSSY0JRpyviWNZ2qOylKqWvesvofsiLuGp9JR2plDDctUokaqbKsor0cDLUWW864ZaJSOSfsJtK9EHClxSdnsAzTN4yTC5505C/nbfiea4MrzRhmW8Yw4sZPCbzJzXzZrK/p58u77e3d6dSEUxaXzpKONLW0gI2ifdNrqoSwFKpaUqWhByt4y8RwkjmfMHoYy8k+vtW3IXlMphOlkCWjoiXHFbGQILfcw4Tb50PuYkF0leOrJbx8di/kCSPpxOoV5indhRndxX7qZzfaizHsds7v1sEPbjdHSLnwihxiOGBMDhc4vzkP8flz2O1yPvIJxgnJimwx7p2H8fTjCgeYx3Qf5riQmezjf50hHYE5BbIiC8lxXMoW52HWo0OfftG+K3x7X9yNkIYQ9x+WdH9iv/kf6G/APDiPxeaKdIRxFFY2SAfBNVWNBQqVbKnWUg/ITVsLTlZkHXxyfg7zVGx8wt2Z2of+LqN5cAlNmmOe6W+dzXYXg51NKt4WzFnJSslYFs3pMKfiK1oX0STMQ2zjfM73k0RosYg+uRF/wbOeY0SfijtID8UfMD2QjrTQGA4ttADamAErhgOzDDSrLWqr0Spha6taZbVqmdEKeq4sVLwfcoSsCGaTFYuveyWlRcGoZBapQq5oLxqgrK4VykHLumo+wC1ux6wD0zCFVtIWB0tVy4G2SkpqZQW10ENdL0t55XQ2BGeZ+nsT/jmhPXvpy8nar7NbfDrd46VPbW2DVnMqFK+oaltOm7aqaV83fdvrBiuTJ1sHP4VXkN8w9mFyKT8iN867PYw/H3nbzDVGj+O77dw4E8MUhlScbVl82NfX2edXrFgs+t15+u9ijKtgHjEW2Vjg/LtlHo/H4w8AAAD//wMAtEuIEAwFAAA=
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUTW/bOBD9KwLPpkJSFCUK2IPhtFgjTWMk7u5ibxQ5jInIokFRToMi/31BWa6dooe9CaP5eO/NG/5AvdoDatDycPh0hD4OaIGim0KMMIGJwIRuSd3wqilYXknJKRH/ogVyd/CGGlRxramWgAsQgLkhJW4Lq7ExICmhhrCSp57qeUDND6RcbuDoNOR++AvC4HyPGvS3641/TbOVy3XnR5MH38G6H6LqdQLzdb26w1+Wm+3D5pQ1wJCKc2dQg+qqMApqjtu6FZgzZrAqqwJzoVplGJWE2VOZ6yOEXnX5YF4u842PPUTdsJwVOcFMovcFMiqqBLlVA2zfDgnFJNFtii+m8PTZ/EBHCKhhi7OYp3Y3unM3+6EdXWduogrPEG1Qe3j14QWOqkMLdAj+ACE6mLR5eMoukCjJSc4EIwQt0L3SO9dDtr7NHrpEWOmacDAFlmAN5pIqLHlRYFOUqmLCVtVE+A5CD91V13ungx+8jdksefZhzsr30fWjH4ds3Ud4Diqe6j6rbgC0QJux7dywewRl3rb+cUz/+rFLXFZjCNDHbKPiLvtTDTvUIKlqTZVUUimhtYWSgCWGKEEqA8IIMJyZynDJjeCSaMFVS7lRJW1tiqAFehjjYYxn/b9fgdgGt9+DuSDYThpvOhWtD/u1gT4669JqzhmTobpuYpXNPVedgz5+EBk1iFBgpqgBW0YF5rVRWJWFxEIUwgLVsmL0JJh1z+NPnYi1hhe2rGvRypYSYLaqOalsS4y2hZambKFiFalqqKUmpC05rVupiQFacpPYBW9GHX+1QjEt6HHs03Vm60T71fX4u+AXRTbBR699lxbmOnh6GyLsf7e1ld8f/OBi4m/n1X4b4N736e98/7Nmc/HSx0sM0h1k0+kVlNu2rUosJOeYU8lxq2uNZWEtr4RlYBLwW69fIGTJYMr1007Onnp4ypZB71wEHceQJv8zkTqt8/P5ZC565F8/bVc+wPJwWMzRP45JpFOzswE+vCvfhpS+80O8ojxTe4LOnoFd2cnA8fRUuRQUxtRgBMWM0xJzKSmuZVnhtqpb2YoaSn2xa/YIxgXQceq3DWOaNiv7O18uQ3RW6Tik4/ni9WSn2Z9zyq8gr9b2s/o0/Gp1s5XmTpQkyz6dHs7JQf/r3Xx/f3//DwAA//8DAMe2UmsoBgAA
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS/zQzbBb1HVTL+JFWvRGcka2EK20oKhNA2P/e0DtBol7600Y6J0ZPvPOvJHJH5B05PZ4/OWEU15ITfKwhQQTmjJNGd8z2ynTSdEIyxxX5h9Sk+ERv5KOGBUjjw6pRI1UAWtpkH2kAOg448BEq0pO/7KQ7o34oQE8DRGbefmEaRnmiXTkr2GC+Uup7YcmjvMKTZpHfJiW7KdYmvnz4e6R/nG72z/tLn8tuBRxMwDpiDUSPFpFgw2aKiGA+tZIqrQPHgR3TPQX2TBlTJMfmwU+/6gPc54wx040QjaMCkfONQGffWk5+AX3X4+liw3RfYnXW3j77N7ICRPpRP0d5iXdTRyHmzwfRzzhePRpwXQT58PBT0BqckzzEVMecMOyvXQcfR7mqboWuxsHnDKpydNztRt97ud0eMfq+YLg4X8QOGEKpCOStVIbg0pK6Z0OgiEYHbUWIXpm+iCQR2StU8Zxw7h0gjnZamMNeOYiqcnLOAc//r5s/JxgwQIzQgtU6ITS2kWG0mLfGmTgtQ7aRgfSGqEsWOmd99wFNNHpWAzywcfXYcLq4Z50hHEUIC3SXnBNlQVPfSsd1VrqHnl0RnBSk7t5ysO0zutSPUwZX9LGj3TkVz8ueCF3m+LrkDHmNRWof+tSbJdmWGOufjiAs4Y1krEiWvNxzdVHhCFhzFjw7tN6zfcfidBiE92tKeGUq53Pr9VvfnktVLyN3LvyVB1jjy3DngHzmhlADRpBCTCgnAKtHIta+cAV+JaHvkRITbAYrto83sfohGWaKrSBKgOKBiE5FcJpw4NWCt5zrJ7GovPRMoUgqcMeqHLcU6ekpCBbb4Tujdmc8R3J1XycFcCAp8u2bh1oAIugORWKt1Q5x6l1raHB2OCCttjG0vMjpgnHn0B9GGKal7nP1dW71Tt0H9epXJxq8/GXYaL/bjO6n+NnTFWZsR+msmDXsZ5rckC/rAkP28Hq3siubFe13+6WMI2z2tXkOfuU1+M1zKVuTGvl+Xw+fwMAAP//AwDUFLHF9gQAAA==
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUW2/cNhCF/4rAZ1HmTbzozbBb1HDTLGKjLfo24oxiIVppQVGbBob/e0HtBqn71jdhoDM8/OYMX9kMR2Iduz2dfjrTnFdWszzuJSWU5cJyIZ+F74zrtGq08qG14i9Ws/GRvrGOOROjjIG4JkvcoGh5r4fIESlIIVGo1pSe8Hll3SuDsUE6j5GaZf2d0jouM+vYH+OMy9dyNoxNnJYNm7RM9DCvGeZYzPz2cPfIf709PH88XP5aaS3iZkTWMe80AnnDe99bbpRCDq3T3FjoAZUMQg0X2ThnSjNMzYpffpyPS54px041SjeCq8DeaoaQoVjuYaXnb6fiYkd0X+r1Xt4/u1d2psQ6VX+HeWl3E6fxZt36ic40nSCtlG7icjzCjKxmp7ScKOWRdixnSv2yjrkQjdGB91KiB2dah163SjvUgtAL12LAANbYQcW2HbD3wZnBoJIGLRnTO1azHdw0QR6Xubp6v5tGmjOr2cen6jBBHpZ0fIf+6UL04X8ALbZZx7RotXWOjNYagu2VIHQ2Wqv6CMINvSIZSbTBuCCdkDooEXRrnXcIIkRWsw8QX8aZqod71jEhSaH2xAclLTcegUOrA7dW24FkDE5JVrO7Zc7jvC3bWj3MmT6n/b6sYz/DtNLlprcpvoyZYt5SgfCnLWE8pAW3mKsfAZCiEY0Wooi2fNpy9YlwTBQzFRzPabv2+49EWbWL7raUaM7VAfJL9QusL6xjAXyUECAA2BgHagUNAgVY4ZAsWkKj0KEJBq0JIloDvTQIreyHUmE1o5K3ao+4HNpB+0FzFbXgBiJwsBi4UUbqqLXS5j3H6uNUdBC9MISaBxqQmyCBB6M1R92CU3Zwbp/kdyTXsEhRACOdL8u6O7CIntBKroxsuQlBch9ax3vn+9BbT20snh8pzTT9C9SHMaZlXYZcXbNWvUP3aZvLg1Ptufs6zvzvfUb3S/xCqSozhnEu+3Ud61vNjgTrlui4v1fdKzuU5aqe92dLuSZ4G2r2lCHl7XQtS20b13r99vb29g8AAAD//wMA0nzqzvUEAAA=
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTTW/cNhD9KwLPokxSFCXqZqxTdOEmXiSLtOhtxBnFhGVqQVFOAmP/e0DtBol764UgBnwz72P4ygI8E+vZ7en07oVCWljJkt9KSijDheFCHkXX67avu8p0VraN+JeVzN/Td9azVjsnnSVekyGuUTR8qEfHEclKIVGoRuee8GVh/SsDXyG9eEfVvHymuPg5sJ797QPOX/Ns8JWb5hWrOE+0D0uC4DKZD/vdPf/r9nB8OFxeLbRkcOWR9axrawTqNB+6wXCtFHJo2pprAwOgklao8QLzIVEMMFULPv2aj3MKlFyvKlVXgivLziVDSJApD7DQ8fsps9gsusv1citv1/6VvVBkvSp/mnlpd+Mmf/O8DKuf8OZyJliesspTnE8Uk6fNk03mNEHycyiuk3aTp5BYyR4+FYcJ0jjH5zdGfbro3/8P+cc8/d03cmsi3M1rSKxnsrasZO/BPfpAxf6O9UxIUlh3xEclDdcdAoemttyY2owknW2VZCXbzSH5sM7rUuxDoi9xE8B69gdMC12o30b36BO5tMas6h+Td+EQZ1xdKn75L0UlqlqIDFrTaU3FR0IfySXK+o5xvfb7D0QZtYF2a4wUUnGA9Fj8Ccsj65mFzkmwYAGMcyM1gkaBAoxokQwaQq2wRW01Gm2FMxoGqREaOYy5wkpGOe5i2zDCwSllJBdtbbkGZXmn5MiNpRFNI5ua8I2PxcOUceA6oQlrnt9xbSVwq+uaY91Aq8zYtls0Py25pi9FNhjp5fJXNgYGsSM0kistG66tlbyzTcuHthvsYDpqXOZ8TzHQ9JtR772L8zKPqbguT/HGuo9ryP+92Bbpqw/825bR3eyeKBY5Y/Ahr/c11vP5fP4BAAD//wMAgHCTeTYEAAA=
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUXU/sNhD9K5Ffuw7+imPnjS5cdUWB1d1VW/VtYk/AJTgrx4F7hfjvVbJw+biq1JcoGttzzpw5M08kwj2ShpweDucPGPNIViSHJSSY0JRpyviemUbVjTSltoLVdfU3WZFwgd9JQ2rlHHcWqUSNVHlW0VZ2jnqPljPumajUnBNuRtI8EQilx4fgsBzGPzCNYYikIX+G6IfHGRtC6fph8mUaetzEMUN0M5mrzfqC/n663V9vj7dGHOfHZfCkIaaWHtAo2ppWUyWEp1DVkioNLXjBLRPd8VmIGVOEvhz93Ru+H3LE7BpRClkyKix5XhEPGWbKLYy4/36YWSwSnc3x1RJefpsn8oCJNGL1KuYx3Ynrw8n92E6h9yfLl6zIIQ0HTDngosb1rngjwVnJSqEFY2RFLsHdhojF5qy47ucSwRmm0EtqsfNUWQ7UKimplxXUQnd1vZR4gSli/y7rZXBpGIcuFy8iFx9wdqfr8whtjzPGF+hHJCuyGXcZood+iHj+Dd2Uj7n2aZqP10PMIU7DNBabmPEmwcv56/v1lBLGXGwh3xa/wXhLGmLBOA4WLIB2rsOKYcc8A81qj9pr9Er42iurvFaWOa2g5cpDxdtujpAV+XXWcDc5h+P4xmYxSd8vHIqXPq37gDF/kJE0hHEUXhqkneCaKuOBQiUt1VrqDrmzteCvMHtIN5hJQzrTti1zrhXKcgfCgvQdk153Voi6BtXJqlZC64rV4HxdC668rNGB7CQzgqzINg1+cvlzq+XSgG0a/kGXZ6lIQzSrKuOgbYVW3IA1qLhWRlusreqAKela4JWBtuUMKuasEQ64tqBaX3U/VDqPNyHiWRgPPXx/h2tKXcpfHIDhHahP178kuMfHId1dHW1cXp3vyYp8neK8EYrNbJHHEOk3PU/05dTnsL9NCB795eDxZx/hPC7FMqHec88MdlR73lFVqZqCc5xK5ZWumKtaNrM5G9wdpmJ2GIQ4T9WPZNe74jS525DR5SnN/P5aeFzvim0PuRvS/YdN8q6wzwKUQnI2d8bjw3EbLRy19wa95lQoXlFlLafGVjVta9PaVhus3MzxesqHKRdf0YeELi8Vv3hxwVzforv7WYxXF7xYlLPZa7vjFluk/V9L7HlF7hHGKeH9sq2bJ7KJEdOCfDYdR3ETL0PfhxHdEP1IGi2lKYU19oXhf95TrCo1Y/L5+fn5XwAAAP//AwB4OEzzGwYAAA==
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUwW7cIBCGX8Was3EAY2x8izaNukrbrNpVW/WGYZygOHgFOG0U7btXeLdKc6p6QWjMP/zzzeAX8PoRoYfLw+HdE/oUoYTk1hCnXBIqCWV72vWi7euukp1kinc/oAR3g8/QQyuMYUYhqVEiEZY2ZKhHQ6xFxSizlDci59R3EfoX0K6y+OQMVnP8iiG62UMP35y38898t3aVmebFVmGecOtj0t5kM5+2mxvy4XK3v92dTkWMWVw5Cz10bW01doIM3SCJ4NwS3bQ1EVIP2nKmKB9PMucTBq+nKtqH1/vtnDwm0/OK1xUlXMGxBKuTzpYHHXH/fMguVkRXOV6u4XXbv8ATBuh5+QfmKd2FmdzFYxwWN9mL05p0fIjrOmqT5vAMJRzCfMCQHK58LmPEx2F63uv4cH06k7fx3S80S0K7mRefoAdWSyhhBTRNOrnZF2ePm8mhT+vHFJyPzvwrVw0l3H4pdpNO4xwe3/Tjywnz9j8of9Tm3nkstlfQA2XIbd0hGTmTRHRWE93UikhZyxGZUS1nUMJm9sn5ZV5isfUJ78JaEvRwraeIJ3+Xwdy7hCYtIdf5Xea52oXZLiYVr71ktKJVTWkWLemwpOIzWhfQJMxF7MNyzvf1rYRLvoo2SwjoU7HT6b54r+M99KB0Z5hWWmktjRmxoThSS7WkrUVpJVrBbWuFElYKRY0UemDC6oYNY45ACZhHp1inVXE6WCUGIoUQRDSjJB1THWGiHhEZVYxmxSvH4nbKOm06KtDWROFoiVBMEyXqmti60S2XY9uu/P8gOc8DoxmwxafTu1sdSGs7tJIRLlhDhFKMdKppydB2gxpkh43JDm4weJz+AvXRmTDHeUzFeUKKN+g+Lz7/O4p1Wn46T36tPbqazQOGIvdYO5+fyrmtx+Px+BsAAP//AwBa5USZggQAAA==
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTy27cOBD8FYFnUeZLlKibMd5FBk7Wg8RIFntrsVsZIjI1kCgngTH/vqBmAie55UYUWd3VVc0XFuGJWMduT6e/nimmhZUshQ1SQlkuLBfyUbSdaTrdVtZppZ3+j5Us3NN31rHGeC+9I67JEjcoat7rwXNEclJIFKo2uSZ8Xlj3wiBUSM/BUzUtH2lewhRZxz6FiNPX3BtC5cdpxWqeRtrHJUH0Wcw/+909f3t7eHw4XF4ttGRyFZB1rG00ArWG921vuVEKOdSN5sZCD6ikE2q40EJMNEcYqwW/vPbHKUVKvlOV0pXgyrFzyRASZMk9LPT4/ZRVbBbdZbzc4O3YvbBnmlmnyh9mXsrd+DHc+OnpCSLeDCGG5chKdpqnE80p0GbHNuE4QgpTLK5NdmOgmFjJHj4UhxHSMM1Pv3j04TL6/g8mfwf+GCIV+zvWMSFJoW6JD0pabloEDrV23FptB5LeNUqyku2mmEJcp3Up9jHR53lTyTr2N4wLXfTdzv4YEvm0zln6vzZnTd9C2k2YAcFKdpgnXH0qXu2WohKVFvnyYU2nNRXvCcNMPlGe6XFer+V/oyirNtJunWeKqThAOhZvYDmyjjlovQQHDsB6P1AtaBAowIoGyaIlNAobNM6gNU54a6CXBqGW/ZCRrDunW2wLVdey9uiBtxYUN60i3gogrrw33gDUtc478Gpr8TBmHvhWGELNHQ3IjZPAndGao66hUXZomi2OH5ZcE5ci+430fPkamwKL2BJayZWRNTfOSd66uuF90/auty3VPmu+pznS+JNR74Kfp2UaUnFdmOIX696vMX/vYlueryHyb1tkd5P/QnORI4cQ8zZfUz6fz+f/AQAA//8DALuBJ1glBAAA
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUTW/cNhCG/4rAsyjzS0NSN8NuUddNvYgXadEbRY5sIVpqQVGbBsb+94DaDRL31psw0DszfOadeSPRHZB05PZ4/OWEMS+kJnncQoIJoAwo43tmOmU6ZhojmTEA/5CajI/4lXREK++5t0glAlIVWEt7OXgaAlrOeGCiVSWne1lI90bc2AQ8jR6befmEaRnnSDry1xjD/KXUdmPjp3kNTZonfIhLdtGXZv58uHukf9zu9k+7y18LLkXcjIF0BCR6BIdUgjVU9RZpb3CgCMogWCXAm4tsjBlTdFOzhM8/6oc5R8y+E42QDaPCknNNgsuutNy7Bfdfj6WLDdF9iddbePvs3sgJE+lE/R3mJd2Nn8abPB8nPOF0dGnBdOPnw8HFQGpyTPMRUx5xw7K9dJpcHudYXYvdTSPGTGry9FztJpeHOR3esXq+IHj4HwROmHrSEclaCVqjklI6C71gGDR4ANF7x/TQC+QeWWuVtlwzLq1gVragjQ6OWU9q8jLNvZt+XzZ+VrDeBKYFCFRohQKwnqE0OLQaWXAAPRhvgzRaKBOMdNY5bnvU3oIvBvng/OsYsXq4Jx1hHEWQBukgOFBlgqOulZYCSBiQe6sFJzW5m2Me4zqvS/UQM76kjR/pyK9uWvBC7jb51zGjz2sqUP+GUmyX5rD6XP1wAGcNayRjRbTm45qrjxjGhD5jwbtP6zXffyQCxCa6W1PCmKudy6/Vb255LVSc8dzZ8lTwfsCW4cACc8B0QAiAQYmgg7IqgLLMg3I9V8G1vB9KhNQEi+GqzeMMhUERDDUDDFQZI2jfD5wysI4NA/Ss9e84Vk9T0TlvmMIgqcUhUGW5o1ZJSYNsnRYwaC2Gn5BczcdZARzwdNnWy5aFYDAAp0LxliprOTW21bTXprc9GGx96fkRU8TpJ1AfRp/mZR5ydfVu9Q7dxzWWi1NtPv4yRvrvNqP72X/GVJUZuzGWBbuO9VyTA7plTXjYDlb3RnZlu6r9dreEbUQrZE2es0t5PV7D0jRatOJ8Pp+/AQAA//8DAPPar0r1BAAA
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUW2/cNhCF/4rAZ1Hm/aI3w27RhZt6ES/aoG8UZxQL0UoLito0MPa/F9RukbhveRMGOsPDb87wjUzhiKQl96fTL2ec8kJqkoetJJgwlBnK+IG5VrmWucYZq7X0f5OaDE/4jbTEqhh59EglGqQKmKad7CMFQM8ZBya0Kj3D54W0byQMDeB5iNjMy5+YlmGeSEv+GiaYv5azw9DEcV6hSfOIu2nJYYrFzB+7hyf6+/3+8Ly//rXgUsTNAKQlRmJEE5BK4x1VnUfaOewpGuXQeCVMdFfZMGVMUxibBb58Px/mPGGOrWiEbBgVnlxqAiGHYrkLCx6+nYqLDdFjqddbefts38gZE2lF/R/Ma7u7OA53y9qNeMbxFNKC6S7Ox2OYgNTklOYTpjzghuWMqZuXIReiMdrgHOfgglXagpNaSAuSIThmNXjwwSjTi6h1D53zVvUKBFdgUKnOkpps4MYx5GGeqpv3h3HAKZOaPL9U+zHkfk7Hd+hfrkR3PwG02CYtkUxLYy0qKWXwphMMwZpojOhiYLbvBPKITHtlPbeMSy+Yl9pYZyEwH0lNPoT4OkxY7R5JSxhHAdIh7QU3VDkINGjpqTHS9Mijt4KTmjzMUx6mdV6Xajdl/Jy2+5KW/BrGBa83vU/xdcgY85oKhE+mhHGfZlhjrr4HgLOGNZKxIlrzac3VR4QhYcxYcBzSeuv3P4kwYhM9rCnhlKt9yK/Vb2F5JS3xwUUefPAhmBh71Ax7BiwYZgENGAQlwILyCozyLBoVOq4gaN71pUJqgiVv1RZx5rW3ogs09B1QZaKlwfaG9r3XiMxyY/Q7jtXzWHQhOqYQJPXYA1WeB+qVlBSkDlaY3lrR/4DkFhbOCmDA83VZr0sG4BAMp0JxTZX3nDqvLe2s63xnHOpYPD9hmnD8AdSHIaZ5mftc3bJWvUP3cZ3Kg1Ntufs6TPSfbUaPc/yCqSozDsNU9us21ktNjhiWNeFxe6/aN7Ivy1UdtmdL+EZoIWvykkPK6+lWlq6xQovL5XL5FwAA//8DALepIcv0BAAA
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpSUXW/jKBSG/4rFtXEBY2x81013tFGn02ianV3tHYbjFNWBCHBnqyr/fYSTqumM9mLvrGPe8/GcF16RU3tAPbo+HH5/BpciKlGyS4gRJjARmNAt6Xre9aSrOilY27b/oBLZW3hBPWq51lRLwDUIwNyQBg/1qLExICmhhrCG55xqF1H/ipStDDxbDZWP3yBE6x3q0V/WGf8911a20pOfTRX8BGsXk3I6N/NlvbrFn6832/vN6VSEmMWVNahHogYNQgGuhewwHyTgoYMRg+AdCMmZ0N1JZl2C4NRURfP0Xt/45CDpnlWsrghmEh1LZFRSueVBRdi+HHIXC6KbHC+X8PLZv6JnCKhn5RvMU7orPdmrfRxmO5mrye921u1W3o12NweVcuESHYI/QEgWFji/WafCy2e/2+V86JOaIqASbSHsrVPT6ccNjGqe0oOfw0Immqf/OoN6pObkUYkWktO0lC3Ow6wmCy79or0ofP9QbCaVRh/2H5b0cGK//h/o75R+tA6K9Q3qEaHATN0BHhkVmHdGYdXUEgtRixGoli2jqEQr75J1s59jsXYJdmdqH/q7DvrRJtBpDnmmv0U22yZ4M+tUvC+YkopUNSFZNKfDnIqvYGwAnSAPsQ3zOd9PEibYIvpkJ/gFz2oOAVwqNio9Fn+o+Ih6JFWnqZJKKiW0HqEhMBJDlCCtAWEEGM5Ma7jkRnBJtOBqoNyohg5jjqASQTZZsfi6rmvTMtZhI6TE3DSAVSM5HmsKvKEwDC18gFvcT1mndEc4mBpLGA3mkioseV1jUzeqZWJsWzZecDobgpJM/dKEf0YwZy99OVn7bXYDz6d7fLp/xnRgBMWM0wZzKSnuZNPioe0GOYgOGp0nW3kX/RvIbxAGH23Kj8iddXavpp+PvG/mFoKD6WI7d1YHH/2YirMtiw/7+jq7/IoVi0W/W4f/XYxx4/UThCIbS1l3sczj8Xj8AQAA//8DAM61a8IMBQAA
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxUS2/bOBD+KwLPpkJRFCUK2IPhtFgjTWMk7u5ib3wMYyKyaFCU06DIf19Qlmun6GFvwojz+B4zP1Av94BatDwcPh2hjwNaoOimECWUY8IxKbakaVnTEpHTpqzrsv4XLZC7gzfUopppXWgBuAQOmBlSYVVajY0BUZDCEFqxVFM+D6j9gaTLDRydhtwPf0EYnO9Ri/52vfGvqbd0ue78aPLgO1j3Q5S9TsN8Xa/u8JflZvuwOb0aYEjJuTOoRbwEDVwCLrloMFMCsGrAYuCsAS4Y5bo5pbk+Quhllw/m5dLf+NhD1C3NaZkTTAV6XyAjo0wjKznA9u2Qppgouk3xxRSePtsf6AgBtXRxJvNU7kZ37mY/qNF15ibK8AzRBrmHVx9e4Cg7tECH4A8QooOJm4en7DJSQXKSU04JQQt0L/XO9ZCtb7OHLgGWuiEMTIkFWIOZKCQWrCyxKStZU27rmlq0QHcQeuiuqt47HfzgbcxmyrMPfVa+j64f/Thk6z7Cc5DxlPdZdgOgBdqMqnPD7hGkedv6xzH968cuYVmNIUAfs42Mu+xPOexQi4RsdCGFFFJyrS1UBCwxRHJSG+CGg2HU1IYJZjgTRHMmVcGMrAplUwQt0MMYD2M88//9aohtcPs9mMsE24njTSej9WG/NtBHZ12S5vxiMlTXTaiyueaqc9DHDySjFpECqCkbwJYWHLPGSCyrUmDOS26h0KKmxYkw657HnzwRaw0rbdU0XAlVEKC2bhiprSJG21ILUymoaU3qBhqhCVEVKxolNDFQVMwkdMGbUcdfrVBOAj2OfdrObJ1gv7oef+fswsgm+Oi175JgroOntyHC/neqrfz+4AcXE347S/ttgHvfp7/z/s+czclLHy8xSHuQTasHypRKCoJtrRRmlCksjCkwK5iltZIGgKIFuvX6BUKWDCZdP2ly9tTDU7YMeuci6DiG1PmfCdRJzs/nlbnwkX/9tF35AMvDYTFH/zgmkk7Fzgb4cFe+Den5zg/xCvIM7Qk6ex7syk4GjqdT5aYTY0wDhheYsqLCTIgCN6KqsaobJRRvoNIXu2aPYFwAHad62zCmbjOzv/PlMkRnpY5DWp4vXk92mv05P/l1yCvZfmafml9JN1tprlSQZNmn0+GcHPS/7ub7+/v7fwAAAP//AwDjiSUTKAYAAA==
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACoxU227cNhD9FYGvFRXeRJF6c20HXaSOjeyiLfo2Ikc2a5laUJSTwPC/F9TauaJAXwRhSM45c+bMPJEID0h6cnY8Xj5izAupSQ5bSDChKdOU8QMzvTI9V41iQnSq+5vUJLzDz6QnnXKOO4tUokaqPGvpIEdHvUfLGfdMtKrkhNuF9E8EQuPxMThs5uUPTEuYI+nJnyH6+WPBhtC4aV59k+YJd3HJEF0h8353/o7+fnZzuL453VpwKY+b4ElPtESHGpBKbQ1Vg0U6GBwpamVQWyW0M6dnIWZMEaZm8fdf8f2cI2bXi0bIhlFhyXNNPGQolAdY8PD5WFhsEl2UeL2Ft9/+iTxiIr2oX8U8pXvjpvDmYRnWMPk325fU5JjmI6YccFPjel99JcFZwxqhBWOkJlfg7kLEandRXU+lRHCGKfSSWhw9VZYDtUpK6mULndBj14mR1OQdpojTN1mvgkvzMo+5ehG5+g5nf3Z+GWGYsGC8hWlBUpPdss8QPUxzxMtP6NZ8ynVIazk+n2MOcZ3XpdrFjLcJXs5f35+vKWHM1Q3ku+o3WO5ITywYx8GCBdDOjdgyHJlnoFnnUXuNXgnfeWWV18oypxUMXHlo+TCWCKnJr0XD/eocLstXNptJpmnjUL306XwKGPN3MpKeMI7CS4N0FFxTZTxQaKWlWks9Ine2E/wV5gDpFjPpyWiGYWDODUJZ7kBYkH5k0uvRCtF1oEbZdkpo3bIOnO86wZWXHTqQo2RGkJrcpNmvLv/Yark14CbN/6DLRapiZNa2xsEwCK24AWtQca2MtthZNQJT0g3AWwPDwBm0zFkjHHBtQQ2+Hb+odBlvQ8SLsBwn+PwNrml0I39xAIaPoH64/jbBA36c0/37k42b95cHUpMPaywbodoVi3wMkX7SZaKv1imHw11C8OivZo8/+wjLuFTbhHpmOyOdogqcoMp3lg6CMQrIJdqRd5IV+17M7h5TVRwGIZap+pLsel+dJXcXMrq8psLvr43H9b66mSCPc3r4bpN8U9iPAjRCclY64/HxtI1OW8R7g15zKhRvqbKWU2Pbjg6dGeygDbauKHa95uOaqw/oQ0KXt4pfvLhhnt+hu/9ZjFcXvFiUs+K1/WmLbdL+ryX2XJMHhGVN+LBt6/6J7GLEtCFfrKdR3MWrME1hQTdHv5C+bblolG35C8P/vqd5ww1Xz8/Pz/8CAAD//wMAYBpYrRsGAAA=
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRU0W7cKhD9FWuejQMYY+O3aNPqrnLbrNpVW/UNw7hBcfAKcNoo2n+vsLdK83R1XxAaOMOZM2d4Aa8fEXq4Pp3ePaFPEUpIbg1xyiWhklB2pF0vup6JqlZCNIx/hxLcLT5DD60whhmFpEaJRFjakKEeDbEWFaPMUt6InFP/iNC/gHaVxSdnsJrjFwzRzR56+Oq8nX/mt7WrzDQvtgrzhHsfk/Ymk/m4392Sf68Px7vDditizODKWehB1mhQaiS1VB0Rg0IydDgSlKJDqQSXpttgzicMXk9VtA+v79s5eUym5xWvK0q4gnMJViedKQ864vH5lFmsEt3keLmG123/Ak8YoOflHzG3dFdmclePcVjcZK+2Nen4ENd11CbN4RlKOIX5hCE5XPW5jhEfh+n5qOPD++1O3sZ3v9AsCe1uXnyCHlgtoYRVoGnSyc2+uHDcTQ59Wg9TcD4681+5aijh7nNxmHQa5/D4ph+fN5n3/0PlD9rcO4/F/gZ6oAy5rTskI2eSiM5qoptaESlrOSIzquUMStjNPjm/zEss9j7hj7CWBD2811PEjd91MPcuoUlLyHV+k9lXhzDbxaTitZeMVrSqKc2gJZ2WVHxC6wKahLmIY1gu+b68hXDJV9BuCQF9Kg463Rf/6HgPPSjdGaaVVlpLY0ZsKI7UUi1pa1FaiVZw21qhhJVCUSOFHpiwumHDmCNQAmbrFKtbkbNxGIUg3TAaIgZNiaaSEqEGbjVT2o65tFcdi7sp47TpqEBbE4WjJUIxTZSoa2LrRrdcjm3Lx78kufiB0Sywxadt7rZ5sbZDKxnhgjVEKMVIp5qWDG03qEF22JjM+RaDx+kvoT44E+Y4j6m4OKR4I92nxee/o1jd8tN58mvt0c1sHjAUucfa+Twql7aez+fzbwAAAP//AwD8UEJ2ggQAAA==
|
||||
@ -0,0 +1,5 @@
|
||||
https://dc.services.visualstudio.com/v2/track
|
||||
Content-Type:application/x-json-stream
|
||||
Content-Encoding:gzip
|
||||
|
||||
H4sIAAAAAAAACpRTwW7cNhD9FWHOokxSFCXqZqxTdOEmXiSLtOiN4oxiwjK1oCgngbH/HlC7gZPeeiGIAd/Me28eXyHYZ4Iebk+ndy8U0gIlJL+VJJeacc24OPKuV10vVFWbttFt9y+U4O/pO/TQKueEM8Rq0sQU8oYN9egYIhnBBXLZqNzTflmgfwXrK6QX76ial88UFz8H6OFvH3D+mmdbX7lpXrGK80T7sCQbXCbzYb+7Z3/dHo4Ph8urhZYMrjxCD7omR9oSq7XpmBoMsaGjkZFWHWmjpHbdBeZDohjsVC349DYf5xQouV5Wsq44kwbOJaBNNlMe7ELH76fMYrPoLtfLrbxd+1d4oQi9LH+aeWl34yZ/87wMq5/w5nImuzxllac4nygmT5snm8xpssnPobhO2k2eQoISHj4Vh8mmcY7Pvxn16aJ//z/kH/P0d9/IrYlwN68hQQ+iNlDCe+sefaBifwc9cEES647YKIVmqkPLbFMbpnWtRxLOtFJACbs5JB/WeV2KfUj0JW4CoIc/7LTQhfptdI8+kUtrzKr+0TkLhzjj6lLx5r/gFa9qzjNoTac1FR8JfSSXKOs7xvXa7z8QqeUG2q0xUkjFwabH4k+7PEIPxnZOWGONtdq5kRpOI0duNW+RNGpCJbFFZRRqZbjTyg5CoW3EMOYKlEB53cWWsMFRSzg2jHNjmRpQM4Pk2Fi3sh4bbQbKFN98LB6mjLOu44qwZoZGZMoIy4yqa4Z1Y1upx7aV4y+WXLcveDYY6eXyVy4ZR+wItWBSiYYpYwTrTNOyoe0GM+iOGpc531MMNP1i1Hvv4rzMYyqu4Sl+s+7jGvJ/L7YgffWBfdt2dDe7J4pF3rH1Icf7utbz+Xz+AQAA//8DAJKaUgc2BAAA
|
||||
BIN
.appdata/buildverify/Azure.Core.dll
Normal file
BIN
.appdata/buildverify/Azure.Core.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Azure.Identity.dll
Normal file
BIN
.appdata/buildverify/Azure.Identity.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Dapper.dll
Normal file
BIN
.appdata/buildverify/Dapper.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.Bcl.AsyncInterfaces.dll
Normal file
BIN
.appdata/buildverify/Microsoft.Bcl.AsyncInterfaces.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.Bcl.Cryptography.dll
Normal file
BIN
.appdata/buildverify/Microsoft.Bcl.Cryptography.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.Data.SqlClient.dll
Normal file
BIN
.appdata/buildverify/Microsoft.Data.SqlClient.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.Identity.Client.dll
Normal file
BIN
.appdata/buildverify/Microsoft.Identity.Client.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.IdentityModel.Abstractions.dll
Normal file
BIN
.appdata/buildverify/Microsoft.IdentityModel.Abstractions.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.IdentityModel.JsonWebTokens.dll
Normal file
BIN
.appdata/buildverify/Microsoft.IdentityModel.JsonWebTokens.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.IdentityModel.Logging.dll
Normal file
BIN
.appdata/buildverify/Microsoft.IdentityModel.Logging.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.IdentityModel.Protocols.dll
Normal file
BIN
.appdata/buildverify/Microsoft.IdentityModel.Protocols.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.IdentityModel.Tokens.dll
Normal file
BIN
.appdata/buildverify/Microsoft.IdentityModel.Tokens.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/Microsoft.SqlServer.Server.dll
Normal file
BIN
.appdata/buildverify/Microsoft.SqlServer.Server.dll
Normal file
Binary file not shown.
461
.appdata/buildverify/PlotLine.deps.json
Normal file
461
.appdata/buildverify/PlotLine.deps.json
Normal file
@ -0,0 +1,461 @@
|
||||
{
|
||||
"runtimeTarget": {
|
||||
"name": ".NETCoreApp,Version=v10.0",
|
||||
"signature": ""
|
||||
},
|
||||
"compilationOptions": {},
|
||||
"targets": {
|
||||
".NETCoreApp,Version=v10.0": {
|
||||
"PlotLine/1.0.0": {
|
||||
"dependencies": {
|
||||
"Dapper": "2.1.66",
|
||||
"Microsoft.Data.SqlClient": "6.1.3"
|
||||
},
|
||||
"runtime": {
|
||||
"PlotLine.dll": {}
|
||||
}
|
||||
},
|
||||
"Azure.Core/1.47.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Bcl.AsyncInterfaces": "8.0.0",
|
||||
"System.ClientModel": "1.5.1",
|
||||
"System.Memory.Data": "8.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Azure.Core.dll": {
|
||||
"assemblyVersion": "1.47.1.0",
|
||||
"fileVersion": "1.4700.125.36505"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Azure.Identity/1.14.2": {
|
||||
"dependencies": {
|
||||
"Azure.Core": "1.47.1",
|
||||
"Microsoft.Identity.Client": "4.73.1",
|
||||
"Microsoft.Identity.Client.Extensions.Msal": "4.73.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Azure.Identity.dll": {
|
||||
"assemblyVersion": "1.14.2.0",
|
||||
"fileVersion": "1.1400.225.36004"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Dapper/2.1.66": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Dapper.dll": {
|
||||
"assemblyVersion": "2.0.0.0",
|
||||
"fileVersion": "2.1.66.48463"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/8.0.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.1/Microsoft.Bcl.AsyncInterfaces.dll": {
|
||||
"assemblyVersion": "8.0.0.0",
|
||||
"fileVersion": "8.0.23.53103"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Bcl.Cryptography/9.0.4": {
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Bcl.Cryptography.dll": {
|
||||
"assemblyVersion": "9.0.0.4",
|
||||
"fileVersion": "9.0.425.16305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Data.SqlClient/6.1.3": {
|
||||
"dependencies": {
|
||||
"Azure.Core": "1.47.1",
|
||||
"Azure.Identity": "1.14.2",
|
||||
"Microsoft.Bcl.Cryptography": "9.0.4",
|
||||
"Microsoft.Data.SqlClient.SNI.runtime": "6.0.2",
|
||||
"Microsoft.IdentityModel.JsonWebTokens": "7.7.1",
|
||||
"Microsoft.IdentityModel.Protocols.OpenIdConnect": "7.7.1",
|
||||
"Microsoft.SqlServer.Server": "1.0.0",
|
||||
"System.Configuration.ConfigurationManager": "9.0.4"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/Microsoft.Data.SqlClient.dll": {
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.13.25316.3"
|
||||
}
|
||||
},
|
||||
"resources": {
|
||||
"lib/net9.0/cs/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "cs"
|
||||
},
|
||||
"lib/net9.0/de/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "de"
|
||||
},
|
||||
"lib/net9.0/es/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "es"
|
||||
},
|
||||
"lib/net9.0/fr/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "fr"
|
||||
},
|
||||
"lib/net9.0/it/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "it"
|
||||
},
|
||||
"lib/net9.0/ja/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "ja"
|
||||
},
|
||||
"lib/net9.0/ko/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "ko"
|
||||
},
|
||||
"lib/net9.0/pl/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "pl"
|
||||
},
|
||||
"lib/net9.0/pt-BR/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "pt-BR"
|
||||
},
|
||||
"lib/net9.0/ru/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "ru"
|
||||
},
|
||||
"lib/net9.0/tr/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "tr"
|
||||
},
|
||||
"lib/net9.0/zh-Hans/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "zh-Hans"
|
||||
},
|
||||
"lib/net9.0/zh-Hant/Microsoft.Data.SqlClient.resources.dll": {
|
||||
"locale": "zh-Hant"
|
||||
}
|
||||
},
|
||||
"runtimeTargets": {
|
||||
"runtimes/unix/lib/net9.0/Microsoft.Data.SqlClient.dll": {
|
||||
"rid": "unix",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.13.25316.3"
|
||||
},
|
||||
"runtimes/win/lib/net9.0/Microsoft.Data.SqlClient.dll": {
|
||||
"rid": "win",
|
||||
"assetType": "runtime",
|
||||
"assemblyVersion": "6.0.0.0",
|
||||
"fileVersion": "6.13.25316.3"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Data.SqlClient.SNI.runtime/6.0.2": {
|
||||
"runtimeTargets": {
|
||||
"runtimes/win-arm64/native/Microsoft.Data.SqlClient.SNI.dll": {
|
||||
"rid": "win-arm64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "6.2.0.0"
|
||||
},
|
||||
"runtimes/win-x64/native/Microsoft.Data.SqlClient.SNI.dll": {
|
||||
"rid": "win-x64",
|
||||
"assetType": "native",
|
||||
"fileVersion": "6.2.0.0"
|
||||
},
|
||||
"runtimes/win-x86/native/Microsoft.Data.SqlClient.SNI.dll": {
|
||||
"rid": "win-x86",
|
||||
"assetType": "native",
|
||||
"fileVersion": "6.2.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Identity.Client/4.73.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Abstractions": "7.7.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Identity.Client.dll": {
|
||||
"assemblyVersion": "4.73.1.0",
|
||||
"fileVersion": "4.73.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.Identity.Client.Extensions.Msal/4.73.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.Identity.Client": "4.73.1",
|
||||
"System.Security.Cryptography.ProtectedData": "9.0.4"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.Identity.Client.Extensions.Msal.dll": {
|
||||
"assemblyVersion": "4.73.1.0",
|
||||
"fileVersion": "4.73.1.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Abstractions/7.7.1": {
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.IdentityModel.Abstractions.dll": {
|
||||
"assemblyVersion": "7.7.1.0",
|
||||
"fileVersion": "7.7.1.50719"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.JsonWebTokens/7.7.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Tokens": "7.7.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.IdentityModel.JsonWebTokens.dll": {
|
||||
"assemblyVersion": "7.7.1.0",
|
||||
"fileVersion": "7.7.1.50719"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Logging/7.7.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Abstractions": "7.7.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.IdentityModel.Logging.dll": {
|
||||
"assemblyVersion": "7.7.1.0",
|
||||
"fileVersion": "7.7.1.50719"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Protocols/7.7.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Tokens": "7.7.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.IdentityModel.Protocols.dll": {
|
||||
"assemblyVersion": "7.7.1.0",
|
||||
"fileVersion": "7.7.1.50719"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Protocols.OpenIdConnect/7.7.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Protocols": "7.7.1",
|
||||
"System.IdentityModel.Tokens.Jwt": "7.7.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.IdentityModel.Protocols.OpenIdConnect.dll": {
|
||||
"assemblyVersion": "7.7.1.0",
|
||||
"fileVersion": "7.7.1.50719"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens/7.7.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.Logging": "7.7.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/Microsoft.IdentityModel.Tokens.dll": {
|
||||
"assemblyVersion": "7.7.1.0",
|
||||
"fileVersion": "7.7.1.50719"
|
||||
}
|
||||
}
|
||||
},
|
||||
"Microsoft.SqlServer.Server/1.0.0": {
|
||||
"runtime": {
|
||||
"lib/netstandard2.0/Microsoft.SqlServer.Server.dll": {
|
||||
"assemblyVersion": "1.0.0.0",
|
||||
"fileVersion": "1.0.0.0"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.ClientModel/1.5.1": {
|
||||
"dependencies": {
|
||||
"System.Memory.Data": "8.0.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/System.ClientModel.dll": {
|
||||
"assemblyVersion": "1.5.1.0",
|
||||
"fileVersion": "1.500.125.36405"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Configuration.ConfigurationManager/9.0.4": {
|
||||
"dependencies": {
|
||||
"System.Security.Cryptography.ProtectedData": "9.0.4"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net9.0/System.Configuration.ConfigurationManager.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.425.16305"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt/7.7.1": {
|
||||
"dependencies": {
|
||||
"Microsoft.IdentityModel.JsonWebTokens": "7.7.1",
|
||||
"Microsoft.IdentityModel.Tokens": "7.7.1"
|
||||
},
|
||||
"runtime": {
|
||||
"lib/net8.0/System.IdentityModel.Tokens.Jwt.dll": {
|
||||
"assemblyVersion": "7.7.1.0",
|
||||
"fileVersion": "7.7.1.50719"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Memory.Data/8.0.1": {
|
||||
"runtime": {
|
||||
"lib/net8.0/System.Memory.Data.dll": {
|
||||
"assemblyVersion": "8.0.0.1",
|
||||
"fileVersion": "8.0.1024.46610"
|
||||
}
|
||||
}
|
||||
},
|
||||
"System.Security.Cryptography.ProtectedData/9.0.4": {
|
||||
"runtime": {
|
||||
"lib/net9.0/System.Security.Cryptography.ProtectedData.dll": {
|
||||
"assemblyVersion": "9.0.0.0",
|
||||
"fileVersion": "9.0.425.16305"
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
},
|
||||
"libraries": {
|
||||
"PlotLine/1.0.0": {
|
||||
"type": "project",
|
||||
"serviceable": false,
|
||||
"sha512": ""
|
||||
},
|
||||
"Azure.Core/1.47.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-oPcncSsDHuxB8SC522z47xbp2+ttkcKv2YZ90KXhRKN0YQd2+7l1UURT9EBzUNEXtkLZUOAB5xbByMTrYRh3yA==",
|
||||
"path": "azure.core/1.47.1",
|
||||
"hashPath": "azure.core.1.47.1.nupkg.sha512"
|
||||
},
|
||||
"Azure.Identity/1.14.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-YhNMwOTwT+I2wIcJKSdP0ADyB2aK+JaYWZxO8LSRDm5w77LFr0ykR9xmt2ZV5T1gaI7xU6iNFIh/yW1dAlpddQ==",
|
||||
"path": "azure.identity/1.14.2",
|
||||
"hashPath": "azure.identity.1.14.2.nupkg.sha512"
|
||||
},
|
||||
"Dapper/2.1.66": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-/q77jUgDOS+bzkmk3Vy9SiWMaetTw+NOoPAV0xPBsGVAyljd5S6P+4RUW7R3ZUGGr9lDRyPKgAMj2UAOwvqZYw==",
|
||||
"path": "dapper/2.1.66",
|
||||
"hashPath": "dapper.2.1.66.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Bcl.AsyncInterfaces/8.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3WA9q9yVqJp222P3x1wYIGDAkpjAku0TMUaaQV22g6L67AI0LdOIrVS7Ht2vJfLHGSPVuqN94vIr15qn+HEkHw==",
|
||||
"path": "microsoft.bcl.asyncinterfaces/8.0.0",
|
||||
"hashPath": "microsoft.bcl.asyncinterfaces.8.0.0.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Bcl.Cryptography/9.0.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-YgZYAWzyNuPVtPq6WNm0bqOWNjYaWgl5mBWTGZyNoXitYBUYSp6iUB9AwK0V1mo793qRJUXz2t6UZrWITZSvuQ==",
|
||||
"path": "microsoft.bcl.cryptography/9.0.4",
|
||||
"hashPath": "microsoft.bcl.cryptography.9.0.4.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Data.SqlClient/6.1.3": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-ys/z8Tx8074CDU20EilNvBRJuJdwKSthpHkzUpt3JghnjB6GjbZusoOcCtNbhPCCWsEJqN8bxaT7HnS3UZuUDQ==",
|
||||
"path": "microsoft.data.sqlclient/6.1.3",
|
||||
"hashPath": "microsoft.data.sqlclient.6.1.3.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Data.SqlClient.SNI.runtime/6.0.2": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-f+pRODTWX7Y67jXO3T5S2dIPZ9qMJNySjlZT/TKmWVNWe19N8jcWmHaqHnnchaq3gxEKv1SWVY5EFzOD06l41w==",
|
||||
"path": "microsoft.data.sqlclient.sni.runtime/6.0.2",
|
||||
"hashPath": "microsoft.data.sqlclient.sni.runtime.6.0.2.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Identity.Client/4.73.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-NnDLS8QwYqO5ZZecL2oioi1LUqjh5Ewk4bMLzbgiXJbQmZhDLtKwLxL3DpGMlQAJ2G4KgEnvGPKa+OOgffeJbw==",
|
||||
"path": "microsoft.identity.client/4.73.1",
|
||||
"hashPath": "microsoft.identity.client.4.73.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.Identity.Client.Extensions.Msal/4.73.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-xDztAiV2F0wI0W8FLKv5cbaBefyLD6JVaAsvgSN7bjWNCzGYzHbcOEIP5s4TJXUpQzMfUyBsFl1mC6Zmgpz0PQ==",
|
||||
"path": "microsoft.identity.client.extensions.msal/4.73.1",
|
||||
"hashPath": "microsoft.identity.client.extensions.msal.4.73.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Abstractions/7.7.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-S7sHg6gLg7oFqNGLwN1qSbJDI+QcRRj8SuJ1jHyCmKSipnF6ZQL+tFV2NzVfGj/xmGT9TykQdQiBN+p5Idl4TA==",
|
||||
"path": "microsoft.identitymodel.abstractions/7.7.1",
|
||||
"hashPath": "microsoft.identitymodel.abstractions.7.7.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.JsonWebTokens/7.7.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-3Izi75UCUssvo8LPx3OVnEeZay58qaFicrtSnbtUt7q8qQi0gy46gh4V8VUTkMVMKXV6VMyjBVmeNNgeCUJuIw==",
|
||||
"path": "microsoft.identitymodel.jsonwebtokens/7.7.1",
|
||||
"hashPath": "microsoft.identitymodel.jsonwebtokens.7.7.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Logging/7.7.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-BZNgSq/o8gsKExdYoBKPR65fdsxW0cTF8PsdqB8y011AGUJJW300S/ZIsEUD0+sOmGc003Gwv3FYbjrVjvsLNQ==",
|
||||
"path": "microsoft.identitymodel.logging/7.7.1",
|
||||
"hashPath": "microsoft.identitymodel.logging.7.7.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Protocols/7.7.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-h+fHHBGokepmCX+QZXJk4Ij8OApCb2n2ktoDkNX5CXteXsOxTHMNgjPGpAwdJMFvAL7TtGarUnk3o97NmBq2QQ==",
|
||||
"path": "microsoft.identitymodel.protocols/7.7.1",
|
||||
"hashPath": "microsoft.identitymodel.protocols.7.7.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Protocols.OpenIdConnect/7.7.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-yT2Hdj8LpPbcT9C9KlLVxXl09C8zjFaVSaApdOwuecMuoV4s6Sof/mnTDz/+F/lILPIBvrWugR9CC7iRVZgbfQ==",
|
||||
"path": "microsoft.identitymodel.protocols.openidconnect/7.7.1",
|
||||
"hashPath": "microsoft.identitymodel.protocols.openidconnect.7.7.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.IdentityModel.Tokens/7.7.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-fQ0VVCba75lknUHGldi3iTKAYUQqbzp1Un8+d9cm9nON0Gs8NAkXddNg8iaUB0qi/ybtAmNWizTR4avdkCJ9pQ==",
|
||||
"path": "microsoft.identitymodel.tokens/7.7.1",
|
||||
"hashPath": "microsoft.identitymodel.tokens.7.7.1.nupkg.sha512"
|
||||
},
|
||||
"Microsoft.SqlServer.Server/1.0.0": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-N4KeF3cpcm1PUHym1RmakkzfkEv3GRMyofVv40uXsQhCQeglr2OHNcUk2WOG51AKpGO8ynGpo9M/kFXSzghwug==",
|
||||
"path": "microsoft.sqlserver.server/1.0.0",
|
||||
"hashPath": "microsoft.sqlserver.server.1.0.0.nupkg.sha512"
|
||||
},
|
||||
"System.ClientModel/1.5.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-k2jKSO0X45IqhVOT9iQB4xralNN9foRQsRvXBTyRpAVxyzCJlG895T9qYrQWbcJ6OQXxOouJQ37x5nZH5XKK+A==",
|
||||
"path": "system.clientmodel/1.5.1",
|
||||
"hashPath": "system.clientmodel.1.5.1.nupkg.sha512"
|
||||
},
|
||||
"System.Configuration.ConfigurationManager/9.0.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-dvjqKp+2LpGid6phzrdrS/2mmEPxFl3jE1+L7614q4ZChKbLJCpHXg6sBILlCCED1t//EE+un/UdAetzIMpqnw==",
|
||||
"path": "system.configuration.configurationmanager/9.0.4",
|
||||
"hashPath": "system.configuration.configurationmanager.9.0.4.nupkg.sha512"
|
||||
},
|
||||
"System.IdentityModel.Tokens.Jwt/7.7.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-rQkO1YbAjLwnDJSMpRhRtrc6XwIcEOcUvoEcge+evurpzSZM3UNK+MZfD3sKyTlYsvknZ6eJjSBfnmXqwOsT9Q==",
|
||||
"path": "system.identitymodel.tokens.jwt/7.7.1",
|
||||
"hashPath": "system.identitymodel.tokens.jwt.7.7.1.nupkg.sha512"
|
||||
},
|
||||
"System.Memory.Data/8.0.1": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-BVYuec3jV23EMRDeR7Dr1/qhx7369dZzJ9IWy2xylvb4YfXsrUxspWc4UWYid/tj4zZK58uGZqn2WQiaDMhmAg==",
|
||||
"path": "system.memory.data/8.0.1",
|
||||
"hashPath": "system.memory.data.8.0.1.nupkg.sha512"
|
||||
},
|
||||
"System.Security.Cryptography.ProtectedData/9.0.4": {
|
||||
"type": "package",
|
||||
"serviceable": true,
|
||||
"sha512": "sha512-o94k2RKuAce3GeDMlUvIXlhVa1kWpJw95E6C9LwW0KlG0nj5+SgCiIxJ2Eroqb9sLtG1mEMbFttZIBZ13EJPvQ==",
|
||||
"path": "system.security.cryptography.protecteddata/9.0.4",
|
||||
"hashPath": "system.security.cryptography.protecteddata.9.0.4.nupkg.sha512"
|
||||
}
|
||||
}
|
||||
}
|
||||
BIN
.appdata/buildverify/PlotLine.dll
Normal file
BIN
.appdata/buildverify/PlotLine.dll
Normal file
Binary file not shown.
19
.appdata/buildverify/PlotLine.runtimeconfig.json
Normal file
19
.appdata/buildverify/PlotLine.runtimeconfig.json
Normal file
@ -0,0 +1,19 @@
|
||||
{
|
||||
"runtimeOptions": {
|
||||
"tfm": "net10.0",
|
||||
"frameworks": [
|
||||
{
|
||||
"name": "Microsoft.NETCore.App",
|
||||
"version": "10.0.0"
|
||||
},
|
||||
{
|
||||
"name": "Microsoft.AspNetCore.App",
|
||||
"version": "10.0.0"
|
||||
}
|
||||
],
|
||||
"configProperties": {
|
||||
"System.GC.Server": true,
|
||||
"System.Runtime.Serialization.EnableUnsafeBinaryFormatterSerialization": false
|
||||
}
|
||||
}
|
||||
}
|
||||
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
BIN
.appdata/buildverify/System.ClientModel.dll
Normal file
BIN
.appdata/buildverify/System.ClientModel.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
.appdata/buildverify/System.IdentityModel.Tokens.Jwt.dll
Normal file
BIN
.appdata/buildverify/System.IdentityModel.Tokens.Jwt.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/System.Memory.Data.dll
Normal file
BIN
.appdata/buildverify/System.Memory.Data.dll
Normal file
Binary file not shown.
Binary file not shown.
8
.appdata/buildverify/appsettings.Development.json
Normal file
8
.appdata/buildverify/appsettings.Development.json
Normal file
@ -0,0 +1,8 @@
|
||||
{
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
}
|
||||
}
|
||||
12
.appdata/buildverify/appsettings.json
Normal file
12
.appdata/buildverify/appsettings.json
Normal file
@ -0,0 +1,12 @@
|
||||
{
|
||||
"ConnectionStrings": {
|
||||
"DefaultConnection": "Server=localhost;Database=PlotLine;User Id=PlotLineApp;Password=t6eb1cvd9bNB27czde#h9r;MultipleActiveResultSets=true;Encrypt=false;"
|
||||
},
|
||||
"Logging": {
|
||||
"LogLevel": {
|
||||
"Default": "Information",
|
||||
"Microsoft.AspNetCore": "Warning"
|
||||
}
|
||||
},
|
||||
"AllowedHosts": "*"
|
||||
}
|
||||
BIN
.appdata/buildverify/cs/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/cs/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/de/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/de/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/es/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/es/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/fr/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/fr/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/it/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/it/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/ja/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/ja/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/ko/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/ko/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
BIN
.appdata/buildverify/pl/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/pl/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
Binary file not shown.
BIN
.appdata/buildverify/ru/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/ru/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
BIN
.appdata/buildverify/tr/Microsoft.Data.SqlClient.resources.dll
Normal file
BIN
.appdata/buildverify/tr/Microsoft.Data.SqlClient.resources.dll
Normal file
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -177,8 +177,24 @@ public sealed class ScenesController(ISceneService scenes, IPlotService plots, I
|
||||
[HttpPost]
|
||||
[ValidateAntiForgeryToken]
|
||||
public async Task<IActionResult> AddSceneCharacter(SceneCharacterCreateViewModel model)
|
||||
{
|
||||
try
|
||||
{
|
||||
await characters.AddSceneCharacterAsync(model);
|
||||
}
|
||||
catch (InvalidOperationException ex)
|
||||
{
|
||||
TempData["SceneCharacterAddError"] = ex.Message;
|
||||
}
|
||||
|
||||
return RedirectForScene(model.SceneID, model.ReturnProjectID, model.ReturnBookID);
|
||||
}
|
||||
|
||||
[HttpPost]
|
||||
[ValidateAntiForgeryToken]
|
||||
public async Task<IActionResult> UpdateSceneCharacter(SceneCharacterEditViewModel model)
|
||||
{
|
||||
await characters.UpdateSceneCharacterAsync(model);
|
||||
return RedirectForScene(model.SceneID, model.ReturnProjectID, model.ReturnBookID);
|
||||
}
|
||||
|
||||
|
||||
@ -118,6 +118,7 @@ public interface ICharacterService
|
||||
Task<int> SaveCharacterAsync(CharacterEditViewModel model);
|
||||
Task ArchiveCharacterAsync(int characterId);
|
||||
Task<int> AddSceneCharacterAsync(SceneCharacterCreateViewModel model);
|
||||
Task<int> UpdateSceneCharacterAsync(SceneCharacterEditViewModel model);
|
||||
Task DeleteSceneCharacterAsync(int sceneCharacterId);
|
||||
Task<int> AddAttributeEventAsync(CharacterAttributeEventCreateViewModel model);
|
||||
Task<int> AddKnowledgeAsync(CharacterKnowledgeCreateViewModel model);
|
||||
@ -791,6 +792,10 @@ public sealed class TimelineService(
|
||||
|
||||
var assetTimeline = await assets.GetTimelineAsync(projectId, bookId);
|
||||
var characterTimeline = await characters.GetTimelineAsync(projectId, bookId);
|
||||
var scenePovLabels = characterTimeline.Appearances
|
||||
.Where(x => x.RoleInSceneTypeName?.Contains("POV", StringComparison.OrdinalIgnoreCase) == true)
|
||||
.GroupBy(x => x.SceneID)
|
||||
.ToDictionary(x => x.Key, x => x.First().CharacterName);
|
||||
var matchingSceneIds = await BuildMatchingSceneIdsAsync(filter, orderedScenes, timeline.ThreadEvents, assetTimeline.Events, characterTimeline.Appearances, projectId, bookId);
|
||||
var focusSceneIds = await BuildFocusSceneIdsAsync(filter, orderedScenes, timeline.ThreadEvents, assetTimeline.Events, characterTimeline.Appearances, projectId, bookId);
|
||||
var focusLabel = BuildFocusLabel(filter, plotLines, plotThreads, allAssets, allCharacters, allLocations);
|
||||
@ -851,6 +856,7 @@ public sealed class TimelineService(
|
||||
CharacterLanes = BuildCharacterLanes(characterTimeline.Characters, characterTimeline.Appearances, orderedScenes),
|
||||
MatchingSceneIDs = matchingSceneIds,
|
||||
FocusSceneIDs = focusSceneIds,
|
||||
ScenePovLabels = scenePovLabels,
|
||||
FocusLabel = focusLabel
|
||||
};
|
||||
}
|
||||
@ -1970,7 +1976,7 @@ public sealed class CharacterService(IProjectRepository projects, ICharacterRepo
|
||||
{
|
||||
if (!model.ReturnProjectID.HasValue || string.IsNullOrWhiteSpace(model.NewCharacterName))
|
||||
{
|
||||
throw new InvalidOperationException("Choose a character or enter a new character name.");
|
||||
throw new InvalidOperationException("Select an existing character or enter a new character name.");
|
||||
}
|
||||
|
||||
characterId = await characters.SaveCharacterAsync(new Character
|
||||
@ -1997,6 +2003,23 @@ public sealed class CharacterService(IProjectRepository projects, ICharacterRepo
|
||||
});
|
||||
}
|
||||
|
||||
public Task<int> UpdateSceneCharacterAsync(SceneCharacterEditViewModel model) => characters.SaveSceneCharacterAsync(new SceneCharacter
|
||||
{
|
||||
SceneCharacterID = model.SceneCharacterID,
|
||||
SceneID = model.SceneID,
|
||||
CharacterID = model.CharacterID,
|
||||
RoleInSceneTypeID = model.RoleInSceneTypeID,
|
||||
PresenceTypeID = model.PresenceTypeID,
|
||||
LocationID = model.LocationID,
|
||||
EntryLocationID = model.EntryLocationID,
|
||||
ExitLocationID = model.ExitLocationID,
|
||||
AppearanceNotes = model.AppearanceNotes,
|
||||
OutfitDescription = model.OutfitDescription,
|
||||
PhysicalCondition = model.PhysicalCondition,
|
||||
EmotionalState = model.EmotionalState,
|
||||
KnowledgeNotes = model.KnowledgeNotes
|
||||
});
|
||||
|
||||
public Task DeleteSceneCharacterAsync(int sceneCharacterId) => characters.DeleteSceneCharacterAsync(sceneCharacterId);
|
||||
|
||||
public Task<int> AddAttributeEventAsync(CharacterAttributeEventCreateViewModel model) => characters.SaveAttributeEventAsync(new CharacterAttributeEvent
|
||||
|
||||
47
PlotLine/Sql/012_SceneCharacterEditing.sql
Normal file
47
PlotLine/Sql/012_SceneCharacterEditing.sql
Normal file
@ -0,0 +1,47 @@
|
||||
CREATE OR ALTER PROCEDURE dbo.SceneCharacter_Save
|
||||
@SceneCharacterID int = NULL, @SceneID int, @CharacterID int, @RoleInSceneTypeID int = NULL, @PresenceTypeID int = NULL,
|
||||
@LocationID int = NULL, @EntryLocationID int = NULL, @ExitLocationID int = NULL,
|
||||
@AppearanceNotes nvarchar(max) = NULL, @OutfitDescription nvarchar(max) = NULL, @PhysicalCondition nvarchar(max) = NULL,
|
||||
@EmotionalState nvarchar(max) = NULL, @KnowledgeNotes nvarchar(max) = NULL
|
||||
AS
|
||||
BEGIN
|
||||
SET NOCOUNT ON;
|
||||
|
||||
IF @SceneCharacterID IS NULL OR @SceneCharacterID = 0
|
||||
BEGIN
|
||||
SELECT @SceneCharacterID = SceneCharacterID
|
||||
FROM dbo.SceneCharacters
|
||||
WHERE SceneID = @SceneID AND CharacterID = @CharacterID;
|
||||
END
|
||||
|
||||
IF @SceneCharacterID IS NULL OR @SceneCharacterID = 0
|
||||
BEGIN
|
||||
INSERT dbo.SceneCharacters (SceneID, CharacterID, RoleInSceneTypeID, PresenceTypeID, LocationID, EntryLocationID, ExitLocationID,
|
||||
AppearanceNotes, OutfitDescription, PhysicalCondition, EmotionalState, KnowledgeNotes)
|
||||
VALUES (@SceneID, @CharacterID, @RoleInSceneTypeID, @PresenceTypeID, @LocationID, @EntryLocationID, @ExitLocationID,
|
||||
@AppearanceNotes, @OutfitDescription, @PhysicalCondition, @EmotionalState, @KnowledgeNotes);
|
||||
|
||||
SET @SceneCharacterID = CAST(SCOPE_IDENTITY() AS int);
|
||||
END
|
||||
ELSE
|
||||
BEGIN
|
||||
UPDATE dbo.SceneCharacters
|
||||
SET SceneID = @SceneID,
|
||||
CharacterID = @CharacterID,
|
||||
RoleInSceneTypeID = @RoleInSceneTypeID,
|
||||
PresenceTypeID = @PresenceTypeID,
|
||||
LocationID = @LocationID,
|
||||
EntryLocationID = @EntryLocationID,
|
||||
ExitLocationID = @ExitLocationID,
|
||||
AppearanceNotes = @AppearanceNotes,
|
||||
OutfitDescription = @OutfitDescription,
|
||||
PhysicalCondition = @PhysicalCondition,
|
||||
EmotionalState = @EmotionalState,
|
||||
KnowledgeNotes = @KnowledgeNotes,
|
||||
UpdatedDate = SYSUTCDATETIME()
|
||||
WHERE SceneCharacterID = @SceneCharacterID;
|
||||
END
|
||||
|
||||
SELECT @SceneCharacterID;
|
||||
END;
|
||||
GO
|
||||
@ -218,6 +218,7 @@ public sealed class TimelineViewModel
|
||||
public IReadOnlyList<CharacterLaneViewModel> CharacterLanes { get; set; } = [];
|
||||
public IReadOnlySet<int> MatchingSceneIDs { get; set; } = new HashSet<int>();
|
||||
public IReadOnlySet<int> FocusSceneIDs { get; set; } = new HashSet<int>();
|
||||
public IReadOnlyDictionary<int, string> ScenePovLabels { get; set; } = new Dictionary<int, string>();
|
||||
public string? FocusLabel { get; set; }
|
||||
public ContinuityValidationSummary? LastValidationSummary { get; set; }
|
||||
}
|
||||
@ -600,6 +601,25 @@ public sealed class SceneCharacterCreateViewModel
|
||||
public int? ReturnBookID { get; set; }
|
||||
}
|
||||
|
||||
public sealed class SceneCharacterEditViewModel
|
||||
{
|
||||
public int SceneCharacterID { get; set; }
|
||||
public int SceneID { get; set; }
|
||||
public int CharacterID { get; set; }
|
||||
public int? RoleInSceneTypeID { get; set; }
|
||||
public int? PresenceTypeID { get; set; }
|
||||
public int? LocationID { get; set; }
|
||||
public int? EntryLocationID { get; set; }
|
||||
public int? ExitLocationID { get; set; }
|
||||
public string? AppearanceNotes { get; set; }
|
||||
public string? OutfitDescription { get; set; }
|
||||
public string? PhysicalCondition { get; set; }
|
||||
public string? EmotionalState { get; set; }
|
||||
public string? KnowledgeNotes { get; set; }
|
||||
public int? ReturnProjectID { get; set; }
|
||||
public int? ReturnBookID { get; set; }
|
||||
}
|
||||
|
||||
public sealed class CharacterAttributeEventCreateViewModel
|
||||
{
|
||||
public int SceneID { get; set; }
|
||||
|
||||
@ -689,20 +689,22 @@
|
||||
<div class="asset-event-list">
|
||||
@foreach (var character in Model.SceneCharacters)
|
||||
{
|
||||
<div class="asset-event-item character-item">
|
||||
var editId = $"scene-character-edit-{character.SceneCharacterID}";
|
||||
<article class="character-appearance-card">
|
||||
<div class="character-appearance-summary">
|
||||
<div>
|
||||
<strong>@character.CharacterName</strong>
|
||||
<span class="muted">@character.RoleInSceneTypeName / @character.PresenceTypeName</span>
|
||||
@if (!string.IsNullOrWhiteSpace(character.LocationName))
|
||||
<span class="muted">@((character.RoleInSceneTypeName ?? "Role not set")) • @((character.PresenceTypeName ?? "Presence not set"))</span>
|
||||
<span class="muted" title="@character.LocationPath">Location: @(character.LocationName ?? "Not set")</span>
|
||||
<span class="muted">Entry: @(character.EntryLocationName ?? "Not set")</span>
|
||||
<span class="muted">Exit: @(character.ExitLocationName ?? "Not set")</span>
|
||||
@if (!string.IsNullOrWhiteSpace(character.OutfitDescription) || !string.IsNullOrWhiteSpace(character.PhysicalCondition) || !string.IsNullOrWhiteSpace(character.EmotionalState))
|
||||
{
|
||||
<span class="muted" title="@character.LocationPath">Location: @character.LocationName</span>
|
||||
}
|
||||
@if (!string.IsNullOrWhiteSpace(character.EntryLocationName) || !string.IsNullOrWhiteSpace(character.ExitLocationName))
|
||||
{
|
||||
<span class="muted">In: @(character.EntryLocationName ?? "not set") / Out: @(character.ExitLocationName ?? "not set")</span>
|
||||
}
|
||||
<span class="muted">@character.OutfitDescription @character.PhysicalCondition @character.EmotionalState</span>
|
||||
}
|
||||
</div>
|
||||
<div class="character-appearance-actions">
|
||||
<button class="btn btn-outline-primary btn-sm" type="button" data-bs-toggle="collapse" data-bs-target="#@editId" aria-expanded="false" aria-controls="@editId">Edit</button>
|
||||
<form asp-controller="Scenes" asp-action="DeleteSceneCharacter" method="post">
|
||||
<input type="hidden" name="id" value="@character.SceneCharacterID" />
|
||||
<input type="hidden" name="sceneId" value="@Model.SceneID" />
|
||||
@ -711,6 +713,90 @@
|
||||
<button class="btn btn-outline-secondary btn-sm" type="submit">Remove</button>
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
<div class="collapse character-appearance-edit" id="@editId">
|
||||
<form asp-controller="Scenes" asp-action="UpdateSceneCharacter" method="post" class="asset-create-form">
|
||||
<input type="hidden" name="SceneCharacterID" value="@character.SceneCharacterID" />
|
||||
<input type="hidden" name="SceneID" value="@Model.SceneID" />
|
||||
<input type="hidden" name="CharacterID" value="@character.CharacterID" />
|
||||
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
|
||||
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
|
||||
<div class="row g-2">
|
||||
<div class="col-6">
|
||||
<label class="form-label" for="RoleInSceneTypeID-@character.SceneCharacterID">Role</label>
|
||||
<select class="form-select form-select-sm" id="RoleInSceneTypeID-@character.SceneCharacterID" name="RoleInSceneTypeID">
|
||||
<option value="">Not set</option>
|
||||
@foreach (var option in Model.CharacterRoleOptions)
|
||||
{
|
||||
<option value="@option.Value" selected="@(option.Value == character.RoleInSceneTypeID?.ToString())">@option.Text</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label" for="PresenceTypeID-@character.SceneCharacterID">Presence</label>
|
||||
<select class="form-select form-select-sm" id="PresenceTypeID-@character.SceneCharacterID" name="PresenceTypeID">
|
||||
<option value="">Not set</option>
|
||||
@foreach (var option in Model.PresenceTypeOptions)
|
||||
{
|
||||
<option value="@option.Value" selected="@(option.Value == character.PresenceTypeID?.ToString())">@option.Text</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label class="form-label" for="CharacterLocationID-@character.SceneCharacterID">Current location</label>
|
||||
<select class="form-select form-select-sm" id="CharacterLocationID-@character.SceneCharacterID" name="LocationID">
|
||||
<option value="">Not set</option>
|
||||
@foreach (var option in Model.LocationOptions)
|
||||
{
|
||||
<option value="@option.Value" selected="@(option.Value == character.LocationID?.ToString())">@option.Text</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label" for="EntryLocationID-@character.SceneCharacterID">Enters from</label>
|
||||
<select class="form-select form-select-sm" id="EntryLocationID-@character.SceneCharacterID" name="EntryLocationID">
|
||||
<option value="">Not set</option>
|
||||
@foreach (var option in Model.LocationOptions)
|
||||
{
|
||||
<option value="@option.Value" selected="@(option.Value == character.EntryLocationID?.ToString())">@option.Text</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label" for="ExitLocationID-@character.SceneCharacterID">Exits to</label>
|
||||
<select class="form-select form-select-sm" id="ExitLocationID-@character.SceneCharacterID" name="ExitLocationID">
|
||||
<option value="">Not set</option>
|
||||
@foreach (var option in Model.LocationOptions)
|
||||
{
|
||||
<option value="@option.Value" selected="@(option.Value == character.ExitLocationID?.ToString())">@option.Text</option>
|
||||
}
|
||||
</select>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label class="form-label" for="AppearanceNotes-@character.SceneCharacterID">Appearance notes</label>
|
||||
<textarea class="form-control form-control-sm" id="AppearanceNotes-@character.SceneCharacterID" name="AppearanceNotes" rows="2">@character.AppearanceNotes</textarea>
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label class="form-label" for="OutfitDescription-@character.SceneCharacterID">Outfit description</label>
|
||||
<input class="form-control form-control-sm" id="OutfitDescription-@character.SceneCharacterID" name="OutfitDescription" value="@character.OutfitDescription" />
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label" for="PhysicalCondition-@character.SceneCharacterID">Physical condition</label>
|
||||
<input class="form-control form-control-sm" id="PhysicalCondition-@character.SceneCharacterID" name="PhysicalCondition" value="@character.PhysicalCondition" />
|
||||
</div>
|
||||
<div class="col-6">
|
||||
<label class="form-label" for="EmotionalState-@character.SceneCharacterID">Emotional state</label>
|
||||
<input class="form-control form-control-sm" id="EmotionalState-@character.SceneCharacterID" name="EmotionalState" value="@character.EmotionalState" />
|
||||
</div>
|
||||
<div class="col-12">
|
||||
<label class="form-label" for="KnowledgeNotes-@character.SceneCharacterID">Knowledge notes</label>
|
||||
<textarea class="form-control form-control-sm" id="KnowledgeNotes-@character.SceneCharacterID" name="KnowledgeNotes" rows="2">@character.KnowledgeNotes</textarea>
|
||||
</div>
|
||||
</div>
|
||||
<button class="btn btn-outline-primary btn-sm mt-2" type="submit">Save character</button>
|
||||
</form>
|
||||
</div>
|
||||
</article>
|
||||
}
|
||||
</div>
|
||||
}
|
||||
@ -719,6 +805,11 @@
|
||||
<input type="hidden" name="SceneID" value="@Model.SceneID" />
|
||||
<input type="hidden" name="ReturnProjectID" value="@Model.ReturnProjectID" />
|
||||
<input type="hidden" name="ReturnBookID" value="@Model.ReturnBookID" />
|
||||
<h4 class="inspector-subheading">Add character to scene</h4>
|
||||
@if (TempData["SceneCharacterAddError"] is string addCharacterError)
|
||||
{
|
||||
<p class="text-danger form-helper-message">@addCharacterError</p>
|
||||
}
|
||||
<div class="row g-2">
|
||||
<div class="col-12">
|
||||
<label class="form-label" for="CharacterID">Character</label>
|
||||
@ -766,7 +857,7 @@
|
||||
<div class="col-6"><input class="form-control form-control-sm" name="EmotionalState" placeholder="Emotional state" /></div>
|
||||
<div class="col-12"><textarea class="form-control form-control-sm" name="KnowledgeNotes" rows="2" placeholder="Knowledge notes"></textarea></div>
|
||||
</div>
|
||||
<button class="btn btn-outline-primary btn-sm mt-2" type="submit">Add character</button>
|
||||
<button class="btn btn-outline-primary btn-sm mt-2" type="submit">Add character to scene</button>
|
||||
</form>
|
||||
</section>
|
||||
|
||||
|
||||
@ -25,6 +25,7 @@
|
||||
})
|
||||
};
|
||||
var hasActiveFilter = Model.MatchingSceneIDs.Count != Model.OrderedScenes.Count || !string.IsNullOrWhiteSpace(Model.FocusLabel);
|
||||
var warningScenes = Model.OrderedScenes.Where(x => x.WarningCount > 0).ToList();
|
||||
}
|
||||
|
||||
<section class="context-header">
|
||||
@ -180,6 +181,20 @@
|
||||
|
||||
<div class="timeline-visibility-panel">
|
||||
<span class="eyebrow">Visibility</span>
|
||||
<label class="timeline-control-select">Density
|
||||
<select class="form-select form-select-sm" data-timeline-density>
|
||||
<option value="compact">Compact</option>
|
||||
<option value="comfortable">Comfortable</option>
|
||||
<option value="expanded">Expanded</option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="timeline-control-select">Zoom
|
||||
<select class="form-select form-select-sm" data-timeline-zoom>
|
||||
<option value="book">Book</option>
|
||||
<option value="chapter">Chapter</option>
|
||||
<option value="scene-detail">Scene Detail</option>
|
||||
</select>
|
||||
</label>
|
||||
<label><input type="checkbox" data-timeline-toggle="scene-cards" checked /> Scene cards</label>
|
||||
<label><input type="checkbox" data-timeline-toggle="plot-lines" checked /> Plot lines</label>
|
||||
<label><input type="checkbox" data-timeline-toggle="assets" checked /> Story assets</label>
|
||||
@ -189,6 +204,63 @@
|
||||
<label><input type="checkbox" data-timeline-toggle="metrics" checked /> Metrics</label>
|
||||
</div>
|
||||
|
||||
<div class="timeline-jump-panel">
|
||||
<span class="eyebrow">Jump / search</span>
|
||||
<input class="form-control form-control-sm" type="search" placeholder="Search timeline..." data-timeline-search />
|
||||
<select class="form-select form-select-sm" data-timeline-jump>
|
||||
<option value="">Jump to scene</option>
|
||||
@foreach (var book in Model.Books)
|
||||
{
|
||||
@foreach (var chapter in book.Chapters)
|
||||
{
|
||||
@foreach (var scene in chapter.Scenes)
|
||||
{
|
||||
<option value="@scene.SceneID">Ch @chapter.Chapter.ChapterNumber / Scene @scene.SceneNumber: @scene.SceneTitle</option>
|
||||
}
|
||||
}
|
||||
}
|
||||
</select>
|
||||
<select class="form-select form-select-sm" data-timeline-warning-jump>
|
||||
<option value="">Jump to warning</option>
|
||||
@foreach (var scene in warningScenes)
|
||||
{
|
||||
<option value="@scene.SceneID">@scene.WarningCount warning@(scene.WarningCount == 1 ? "" : "s") - Scene @scene.SceneNumber: @scene.SceneTitle</option>
|
||||
}
|
||||
</select>
|
||||
<select class="form-select form-select-sm" data-timeline-entity-jump>
|
||||
<option value="">Jump to lane item</option>
|
||||
@foreach (var lane in Model.PlotLanes)
|
||||
{
|
||||
var firstScene = lane.SceneSlots.FirstOrDefault(x => x.Events.Any())?.Scene;
|
||||
if (firstScene is not null)
|
||||
{
|
||||
<option value="@firstScene.SceneID">Plot line: @lane.PlotLine.PlotLineName</option>
|
||||
}
|
||||
}
|
||||
@foreach (var lane in Model.AssetLanes)
|
||||
{
|
||||
var firstScene = lane.SceneSlots.FirstOrDefault(x => x.Events.Any())?.Scene;
|
||||
if (firstScene is not null)
|
||||
{
|
||||
<option value="@firstScene.SceneID">Asset: @lane.Asset.AssetName</option>
|
||||
}
|
||||
}
|
||||
@foreach (var lane in Model.CharacterLanes)
|
||||
{
|
||||
var firstScene = lane.SceneSlots.FirstOrDefault(x => x.Appearances.Any())?.Scene;
|
||||
if (firstScene is not null)
|
||||
{
|
||||
<option value="@firstScene.SceneID">Character: @lane.Character.CharacterName</option>
|
||||
}
|
||||
}
|
||||
@foreach (var locationScene in Model.OrderedScenes.Where(x => !string.IsNullOrWhiteSpace(x.PrimaryLocationName)).GroupBy(x => x.PrimaryLocationName).Select(x => x.First()))
|
||||
{
|
||||
<option value="@locationScene.SceneID">Location: @locationScene.PrimaryLocationName</option>
|
||||
}
|
||||
</select>
|
||||
<span class="timeline-shortcut-hint">Shortcuts: arrows scroll, +/- zoom, Esc clears focus</span>
|
||||
</div>
|
||||
|
||||
<div class="timeline-preset-panel">
|
||||
<form asp-action="SavePreset" method="post" data-timeline-preset-form>
|
||||
<input type="hidden" name="ProjectID" value="@Model.Project.ProjectID" />
|
||||
@ -248,6 +320,25 @@
|
||||
</section>
|
||||
}
|
||||
|
||||
@if (Model.Books.Any())
|
||||
{
|
||||
<section class="timeline-minimap" data-timeline-minimap>
|
||||
@foreach (var book in Model.Books)
|
||||
{
|
||||
@foreach (var chapter in book.Chapters)
|
||||
{
|
||||
var chapterWarnings = chapter.Scenes.Sum(x => x.WarningCount);
|
||||
<button type="button"
|
||||
data-jump-scene="@chapter.Scenes.FirstOrDefault()?.SceneID"
|
||||
style="--chapter-scenes:@Math.Max(chapter.Scenes.Count, 1); --chapter-warnings:@Math.Min(chapterWarnings, 8)"
|
||||
title="Chapter @chapter.Chapter.ChapterNumber: @chapter.Chapter.ChapterTitle (@chapter.Scenes.Count scenes, @chapterWarnings warnings)">
|
||||
<span>Ch @chapter.Chapter.ChapterNumber</span>
|
||||
</button>
|
||||
}
|
||||
}
|
||||
</section>
|
||||
}
|
||||
|
||||
@if (!Model.Books.Any())
|
||||
{
|
||||
<section class="empty-panel">
|
||||
@ -260,6 +351,11 @@ else
|
||||
<div class="workspace-layout timeline-filtered-root" data-timeline-root>
|
||||
<main class="timeline-workspace">
|
||||
<section class="timeline-shell workspace-timeline" data-timeline-section="scene-cards">
|
||||
<div class="timeline-section-header" data-collapse-target="scene-cards">
|
||||
<button type="button" data-collapse-toggle="scene-cards">Scene Cards</button>
|
||||
<span>@Model.OrderedScenes.Count scene@(Model.OrderedScenes.Count == 1 ? "" : "s")</span>
|
||||
</div>
|
||||
<div data-collapse-body="scene-cards">
|
||||
@foreach (var book in Model.Books)
|
||||
{
|
||||
<div class="timeline-book">
|
||||
@ -285,17 +381,30 @@ else
|
||||
var selectedClass = scene.SceneID == Model.SelectedSceneID ? "selected" : "";
|
||||
var matchClass = Model.MatchingSceneIDs.Contains(scene.SceneID) ? "filter-match" : "filter-dim";
|
||||
var focusClass = Model.FocusSceneIDs.Contains(scene.SceneID) ? "focus-match" : (Model.FocusSceneIDs.Any() ? "focus-dim" : "");
|
||||
var povLabel = Model.ScenePovLabels.GetValueOrDefault(scene.SceneID, scene.POVCharacterID.HasValue ? "POV set" : "No POV");
|
||||
var metricSummary = string.Join(" / ", Model.MetricGraphs.Take(2).Select(graph => $"{graph.MetricName}: {graph.Points.FirstOrDefault(x => x.SceneID == scene.SceneID)?.Value ?? 0}"));
|
||||
var plotSearch = string.Join(' ', Model.PlotLanes
|
||||
.SelectMany(x => x.SceneSlots.Where(slot => slot.Scene.SceneID == scene.SceneID).SelectMany(slot => slot.Events.Select(evt => $"{x.PlotLine.PlotLineName} {evt.ThreadTitle} {evt.EventTitle}"))));
|
||||
var assetSearch = string.Join(' ', Model.AssetLanes
|
||||
.SelectMany(x => x.SceneSlots.Where(slot => slot.Scene.SceneID == scene.SceneID).SelectMany(slot => slot.Events.Select(evt => $"{x.Asset.AssetName} {evt.EventTitle}"))));
|
||||
var characterSearch = string.Join(' ', Model.CharacterLanes
|
||||
.SelectMany(x => x.SceneSlots.Where(slot => slot.Scene.SceneID == scene.SceneID).SelectMany(slot => slot.Appearances.Select(appearance => $"{x.Character.CharacterName} {appearance.RoleInSceneTypeName} {appearance.PresenceTypeName}"))));
|
||||
var warningSearch = scene.WarningCount > 0 ? "warning warnings continuity" : "";
|
||||
var searchText = $"{scene.SceneNumber} {scene.SceneTitle} {scene.Summary} {povLabel} {scene.PrimaryLocationName} {string.Join(' ', scene.PurposeLabels.Select(x => x.PurposeName))} {plotSearch} {assetSearch} {characterSearch} {warningSearch}";
|
||||
<a class="timeline-scene-card @selectedClass @matchClass @focusClass"
|
||||
data-scene-id="@scene.SceneID"
|
||||
data-timeline-search-text="@searchText"
|
||||
asp-controller="Timeline"
|
||||
asp-action="Index"
|
||||
asp-route-ProjectID="@Model.Project.ProjectID"
|
||||
asp-route-BookID="@Model.SelectedBookID"
|
||||
asp-route-SelectedSceneID="@scene.SceneID"
|
||||
asp-route-FocusType="scene"
|
||||
asp-route-FocusID="@scene.SceneID">
|
||||
asp-route-FocusID="@scene.SceneID"
|
||||
title="Scene @scene.SceneNumber: @scene.SceneTitle POV: @povLabel Location: @(scene.PrimaryLocationName ?? "No location") @scene.Summary">
|
||||
<span class="scene-number">Scene @scene.SceneNumber</span>
|
||||
<strong>@scene.SceneTitle</strong>
|
||||
<span class="scene-pov-label">@povLabel</span>
|
||||
<div class="scene-badge-row">
|
||||
<span class="status-pill">@scene.RevisionStatusName</span>
|
||||
@if (scene.WarningCount > 0)
|
||||
@ -316,6 +425,10 @@ else
|
||||
{
|
||||
<span class="location-pill" data-location-marker title="@scene.PrimaryLocationPath">@scene.PrimaryLocationName</span>
|
||||
}
|
||||
@if (!string.IsNullOrWhiteSpace(metricSummary))
|
||||
{
|
||||
<span class="metric-mini-summary">@metricSummary</span>
|
||||
}
|
||||
@if (scene.PurposeLabels.Any())
|
||||
{
|
||||
<div class="purpose-chip-row">
|
||||
@ -336,15 +449,23 @@ else
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
@if (Model.PlotLanes.Any() && Model.OrderedScenes.Any())
|
||||
{
|
||||
<div class="plot-lane-board" data-timeline-section="plot-lines" style="--scene-count:@Model.OrderedScenes.Count">
|
||||
<div class="plot-lane-board-heading">
|
||||
<span>Plot line lanes</span>
|
||||
<button type="button" data-collapse-toggle="plot-lines">Plot line lanes</button>
|
||||
<small>Thread event markers by scene</small>
|
||||
</div>
|
||||
<div data-collapse-body="plot-lines">
|
||||
@foreach (var group in Model.PlotLanes.GroupBy(x => x.PlotLine.PlotLineTypeName).OrderBy(x => x.Key))
|
||||
{
|
||||
<div class="lane-group">
|
||||
<button type="button" class="lane-group-heading" data-collapse-toggle="plot-group-@group.Key.GetHashCode()">@group.Key</button>
|
||||
<div data-collapse-body="plot-group-@group.Key.GetHashCode()">
|
||||
@foreach (var lane in Model.PlotLanes)
|
||||
{
|
||||
if (lane.PlotLine.PlotLineTypeName != group.Key) { continue; }
|
||||
var laneFocusClass = Model.Filter.FocusType == "plotline" && Model.Filter.FocusID.HasValue && Model.Filter.FocusID != lane.PlotLine.PlotLineID ? "lane-dim" : "";
|
||||
<div class="plot-lane-row @laneFocusClass" style="--plot-colour:@lane.PlotLine.Colour">
|
||||
<a class="plot-lane-label" asp-controller="PlotLines" asp-action="Edit" asp-route-id="@lane.PlotLine.PlotLineID">
|
||||
@ -380,6 +501,10 @@ else
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -391,11 +516,18 @@ else
|
||||
{
|
||||
<div class="asset-lane-board" data-timeline-section="assets" style="--scene-count:@Model.OrderedScenes.Count">
|
||||
<div class="plot-lane-board-heading">
|
||||
<span>Story asset lanes</span>
|
||||
<button type="button" data-collapse-toggle="assets">Story asset lanes</button>
|
||||
<small>Asset event markers by scene</small>
|
||||
</div>
|
||||
<div data-collapse-body="assets">
|
||||
@foreach (var group in Model.AssetLanes.GroupBy(x => x.Asset.Importance >= 8 ? "High importance" : "Other assets"))
|
||||
{
|
||||
<div class="lane-group">
|
||||
<button type="button" class="lane-group-heading" data-collapse-toggle="asset-group-@group.Key.GetHashCode()">@group.Key</button>
|
||||
<div data-collapse-body="asset-group-@group.Key.GetHashCode()">
|
||||
@foreach (var lane in Model.AssetLanes)
|
||||
{
|
||||
if ((lane.Asset.Importance >= 8 ? "High importance" : "Other assets") != group.Key) { continue; }
|
||||
var assetFocusClass = Model.Filter.FocusType == "asset" && Model.Filter.FocusID.HasValue && Model.Filter.FocusID != lane.Asset.StoryAssetID ? "lane-dim" : "";
|
||||
<div class="asset-lane-row @assetFocusClass">
|
||||
<a class="asset-lane-label" asp-controller="StoryAssets" asp-action="Details" asp-route-id="@lane.Asset.StoryAssetID">
|
||||
@ -426,6 +558,10 @@ else
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -437,11 +573,18 @@ else
|
||||
{
|
||||
<div class="character-lane-board" data-timeline-section="characters" style="--scene-count:@Model.OrderedScenes.Count">
|
||||
<div class="plot-lane-board-heading">
|
||||
<span>Character appearances</span>
|
||||
<button type="button" data-collapse-toggle="characters">Character appearances</button>
|
||||
<small>First twelve project characters</small>
|
||||
</div>
|
||||
@foreach (var lane in Model.CharacterLanes)
|
||||
<div data-collapse-body="characters">
|
||||
@foreach (var group in Model.CharacterLanes.Select((lane, index) => new { lane, group = index < 6 ? "Major characters" : "Secondary characters" }).GroupBy(x => x.group))
|
||||
{
|
||||
<div class="lane-group">
|
||||
<button type="button" class="lane-group-heading" data-collapse-toggle="character-group-@group.Key.GetHashCode()">@group.Key</button>
|
||||
<div data-collapse-body="character-group-@group.Key.GetHashCode()">
|
||||
@foreach (var laneItem in group)
|
||||
{
|
||||
var lane = laneItem.lane;
|
||||
var characterFocusClass = Model.Filter.FocusType == "character" && Model.Filter.FocusID.HasValue && Model.Filter.FocusID != lane.Character.CharacterID ? "lane-dim" : "";
|
||||
<div class="character-lane-row @characterFocusClass">
|
||||
<a class="character-lane-label" asp-controller="Characters" asp-action="Details" asp-route-id="@lane.Character.CharacterID">
|
||||
@ -472,6 +615,10 @@ else
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -485,10 +632,11 @@ else
|
||||
<div class="pacing-heading">
|
||||
<div>
|
||||
<p class="eyebrow">Pacing</p>
|
||||
<h2>Metric shape</h2>
|
||||
<h2><button type="button" data-collapse-toggle="metrics">Metric shape</button></h2>
|
||||
</div>
|
||||
<span class="muted">@Model.OrderedScenes.Count scene@(Model.OrderedScenes.Count == 1 ? "" : "s")</span>
|
||||
</div>
|
||||
<div data-collapse-body="metrics">
|
||||
@if (!Model.MetricGraphs.Any() || !Model.OrderedScenes.Any())
|
||||
{
|
||||
<p class="muted">Add scenes to begin seeing emotional and pacing shape.</p>
|
||||
@ -531,6 +679,7 @@ else
|
||||
</div>
|
||||
</details>
|
||||
}
|
||||
</div>
|
||||
</section>
|
||||
</main>
|
||||
|
||||
|
||||
@ -866,6 +866,46 @@ a {
|
||||
border-left-color: #8a6f3d;
|
||||
}
|
||||
|
||||
.character-appearance-card {
|
||||
display: grid;
|
||||
gap: 8px;
|
||||
border: 1px solid #d7d4ce;
|
||||
border-left: 4px solid #8a6f3d;
|
||||
border-radius: 8px;
|
||||
padding: 10px;
|
||||
background: #fff;
|
||||
}
|
||||
|
||||
.character-appearance-summary {
|
||||
display: flex;
|
||||
align-items: flex-start;
|
||||
justify-content: space-between;
|
||||
gap: 12px;
|
||||
}
|
||||
|
||||
.character-appearance-summary > div:first-child {
|
||||
display: grid;
|
||||
gap: 3px;
|
||||
}
|
||||
|
||||
.character-appearance-actions {
|
||||
display: flex;
|
||||
flex-wrap: wrap;
|
||||
justify-content: flex-end;
|
||||
gap: 6px;
|
||||
}
|
||||
|
||||
.character-appearance-edit .asset-create-form {
|
||||
margin-top: 8px;
|
||||
border-top: 1px solid var(--plotline-line);
|
||||
}
|
||||
|
||||
.form-helper-message {
|
||||
margin: 0 0 8px;
|
||||
font-size: 0.86rem;
|
||||
font-weight: 700;
|
||||
}
|
||||
|
||||
.scene-number,
|
||||
.time-label {
|
||||
color: var(--plotline-muted);
|
||||
@ -1622,6 +1662,249 @@ a {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.timeline-control-panel {
|
||||
position: sticky;
|
||||
top: 56px;
|
||||
z-index: 18;
|
||||
}
|
||||
|
||||
.timeline-control-select {
|
||||
padding-right: 6px;
|
||||
}
|
||||
|
||||
.timeline-control-select .form-select {
|
||||
width: auto;
|
||||
min-width: 132px;
|
||||
border: 0;
|
||||
padding-top: 2px;
|
||||
padding-bottom: 2px;
|
||||
background-color: transparent;
|
||||
color: var(--plotline-accent-dark);
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.timeline-jump-panel {
|
||||
display: grid;
|
||||
grid-template-columns: auto minmax(180px, 1.2fr) minmax(180px, 1fr) minmax(170px, 0.9fr) minmax(180px, 1fr) auto;
|
||||
gap: 8px;
|
||||
align-items: center;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
.timeline-shortcut-hint {
|
||||
color: var(--plotline-muted);
|
||||
font-size: 0.76rem;
|
||||
font-weight: 700;
|
||||
white-space: nowrap;
|
||||
}
|
||||
|
||||
.timeline-minimap {
|
||||
display: flex;
|
||||
align-items: stretch;
|
||||
gap: 4px;
|
||||
margin: 0 0 12px;
|
||||
padding: 8px;
|
||||
border: 1px solid rgba(47, 111, 99, 0.18);
|
||||
border-radius: 8px;
|
||||
background: rgba(255, 255, 255, 0.72);
|
||||
}
|
||||
|
||||
.timeline-minimap button {
|
||||
position: relative;
|
||||
flex: var(--chapter-scenes) 1 42px;
|
||||
min-width: 42px;
|
||||
min-height: 34px;
|
||||
border: 1px solid rgba(47, 111, 99, 0.18);
|
||||
border-radius: 7px;
|
||||
color: var(--plotline-accent-dark);
|
||||
background: linear-gradient(180deg, #f8fbf9 0%, #edf4f1 100%);
|
||||
font-size: 0.72rem;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.timeline-minimap button::after {
|
||||
content: "";
|
||||
position: absolute;
|
||||
right: 5px;
|
||||
bottom: 5px;
|
||||
width: calc(var(--chapter-warnings) * 4px);
|
||||
max-width: 28px;
|
||||
height: 4px;
|
||||
border-radius: 999px;
|
||||
background: #b45c5c;
|
||||
opacity: 0.75;
|
||||
}
|
||||
|
||||
.timeline-section-header,
|
||||
.plot-lane-board-heading,
|
||||
.pacing-heading {
|
||||
position: sticky;
|
||||
left: 0;
|
||||
z-index: 7;
|
||||
}
|
||||
|
||||
.timeline-section-header,
|
||||
.plot-lane-board-heading {
|
||||
display: flex;
|
||||
align-items: center;
|
||||
justify-content: space-between;
|
||||
gap: 10px;
|
||||
width: var(--timeline-label-width);
|
||||
margin-bottom: 10px;
|
||||
border-radius: 8px;
|
||||
padding: 8px 10px;
|
||||
background: rgba(255, 255, 255, 0.92);
|
||||
box-shadow: 0 8px 16px rgba(30, 37, 43, 0.05);
|
||||
}
|
||||
|
||||
.timeline-section-header button,
|
||||
.plot-lane-board-heading button,
|
||||
.pacing-heading button,
|
||||
.lane-group-heading {
|
||||
border: 0;
|
||||
padding: 0;
|
||||
color: var(--plotline-accent-dark);
|
||||
background: transparent;
|
||||
font: inherit;
|
||||
font-weight: 900;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
.timeline-section-header button::before,
|
||||
.plot-lane-board-heading button::before,
|
||||
.pacing-heading button::before,
|
||||
.lane-group-heading::before {
|
||||
content: "v";
|
||||
display: inline-block;
|
||||
margin-right: 6px;
|
||||
color: var(--plotline-muted);
|
||||
font-size: 0.72rem;
|
||||
}
|
||||
|
||||
.timeline-section-header button.is-collapsed::before,
|
||||
.plot-lane-board-heading button.is-collapsed::before,
|
||||
.pacing-heading button.is-collapsed::before,
|
||||
.lane-group-heading.is-collapsed::before {
|
||||
content: ">";
|
||||
}
|
||||
|
||||
.lane-group {
|
||||
display: grid;
|
||||
gap: 7px;
|
||||
}
|
||||
|
||||
.lane-group-heading {
|
||||
position: sticky;
|
||||
left: 0;
|
||||
z-index: 6;
|
||||
width: var(--timeline-label-width);
|
||||
border-top: 1px solid rgba(47, 111, 99, 0.12);
|
||||
padding: 7px 8px 2px;
|
||||
color: var(--plotline-muted);
|
||||
background: rgba(247, 250, 248, 0.96);
|
||||
font-size: 0.78rem;
|
||||
text-transform: uppercase;
|
||||
}
|
||||
|
||||
.timeline-section-collapsed {
|
||||
display: none !important;
|
||||
}
|
||||
|
||||
.timeline-chapter-title {
|
||||
position: sticky;
|
||||
top: 0;
|
||||
z-index: 5;
|
||||
background: rgba(238, 245, 242, 0.96);
|
||||
backdrop-filter: blur(6px);
|
||||
}
|
||||
|
||||
.scene-pov-label,
|
||||
.metric-mini-summary {
|
||||
display: inline-flex;
|
||||
width: fit-content;
|
||||
border-radius: 999px;
|
||||
padding: 2px 7px;
|
||||
font-size: 0.72rem;
|
||||
font-weight: 800;
|
||||
}
|
||||
|
||||
.scene-pov-label {
|
||||
color: #514018;
|
||||
background: #fff3d3;
|
||||
}
|
||||
|
||||
.metric-mini-summary {
|
||||
color: var(--plotline-accent-dark);
|
||||
background: rgba(47, 111, 99, 0.08);
|
||||
}
|
||||
|
||||
.timeline-scene-card.search-hit,
|
||||
.timeline-scene-card.keyboard-focus {
|
||||
outline: 3px solid rgba(197, 139, 43, 0.34);
|
||||
box-shadow: 0 12px 26px rgba(197, 139, 43, 0.16);
|
||||
}
|
||||
|
||||
.timeline-scene-card.search-dim {
|
||||
opacity: 0.28;
|
||||
}
|
||||
|
||||
.thread-marker,
|
||||
.asset-marker,
|
||||
.character-marker {
|
||||
transition: transform 0.12s ease, box-shadow 0.12s ease;
|
||||
}
|
||||
|
||||
.thread-marker:hover,
|
||||
.asset-marker:hover,
|
||||
.character-marker:hover {
|
||||
transform: translateY(-1px);
|
||||
box-shadow: 0 6px 12px rgba(30, 37, 43, 0.12);
|
||||
}
|
||||
|
||||
.timeline-filtered-root.density-compact {
|
||||
--timeline-scene-width: 170px;
|
||||
--timeline-grid-gap: 6px;
|
||||
}
|
||||
|
||||
.timeline-filtered-root.density-expanded {
|
||||
--timeline-scene-width: 280px;
|
||||
--timeline-grid-gap: 14px;
|
||||
}
|
||||
|
||||
.timeline-filtered-root.density-compact .timeline-scene-card,
|
||||
.timeline-filtered-root.zoom-book .timeline-scene-card {
|
||||
gap: 4px;
|
||||
padding: 9px;
|
||||
}
|
||||
|
||||
.timeline-filtered-root.density-compact .scene-summary,
|
||||
.timeline-filtered-root.density-compact .purpose-chip-row,
|
||||
.timeline-filtered-root.density-compact .metric-mini-summary,
|
||||
.timeline-filtered-root.zoom-book .scene-summary,
|
||||
.timeline-filtered-root.zoom-book .purpose-chip-row,
|
||||
.timeline-filtered-root.zoom-book .metric-mini-summary,
|
||||
.timeline-filtered-root.zoom-book .location-pill,
|
||||
.timeline-filtered-root.zoom-book .scene-pov-label {
|
||||
display: none;
|
||||
}
|
||||
|
||||
.timeline-filtered-root.zoom-book {
|
||||
--timeline-scene-width: 150px;
|
||||
--timeline-grid-gap: 6px;
|
||||
}
|
||||
|
||||
.timeline-filtered-root.zoom-scene-detail {
|
||||
--timeline-scene-width: 300px;
|
||||
}
|
||||
|
||||
.timeline-filtered-root.zoom-scene-detail .scene-summary {
|
||||
-webkit-line-clamp: 7;
|
||||
}
|
||||
|
||||
.timeline-filtered-root.density-expanded .timeline-scenes {
|
||||
min-height: 230px;
|
||||
}
|
||||
|
||||
.analytics-metric-row {
|
||||
display: grid;
|
||||
grid-template-columns: 170px minmax(560px, 1fr);
|
||||
|
||||
@ -342,3 +342,190 @@
|
||||
|
||||
applyState(state);
|
||||
})();
|
||||
|
||||
(() => {
|
||||
const root = document.querySelector("[data-timeline-root]");
|
||||
if (!root) {
|
||||
return;
|
||||
}
|
||||
|
||||
const workspace = root.querySelector(".timeline-workspace") || root;
|
||||
const densitySelect = document.querySelector("[data-timeline-density]");
|
||||
const zoomSelect = document.querySelector("[data-timeline-zoom]");
|
||||
const searchInput = document.querySelector("[data-timeline-search]");
|
||||
const jumpSelects = document.querySelectorAll("[data-timeline-jump], [data-timeline-warning-jump], [data-timeline-entity-jump]");
|
||||
const sceneCards = [...root.querySelectorAll(".timeline-scene-card[data-scene-id]")];
|
||||
const collapsedKey = "plotline.timeline.collapsed";
|
||||
const densityKey = "plotline.timeline.density";
|
||||
const zoomKey = "plotline.timeline.zoom";
|
||||
const densityValues = ["compact", "comfortable", "expanded"];
|
||||
const zoomValues = ["book", "chapter", "scene-detail"];
|
||||
|
||||
const readSet = (key) => {
|
||||
try {
|
||||
return new Set(JSON.parse(localStorage.getItem(key) || "[]"));
|
||||
} catch {
|
||||
return new Set();
|
||||
}
|
||||
};
|
||||
|
||||
const collapsed = readSet(collapsedKey);
|
||||
|
||||
const applyMode = (kind, value, values) => {
|
||||
values.forEach((item) => root.classList.remove(`${kind}-${item}`));
|
||||
root.classList.add(`${kind}-${value}`);
|
||||
};
|
||||
|
||||
const applyDensity = (value) => {
|
||||
const nextValue = densityValues.includes(value) ? value : "comfortable";
|
||||
applyMode("density", nextValue, densityValues);
|
||||
if (densitySelect) {
|
||||
densitySelect.value = nextValue;
|
||||
}
|
||||
localStorage.setItem(densityKey, nextValue);
|
||||
};
|
||||
|
||||
const applyZoom = (value) => {
|
||||
const nextValue = zoomValues.includes(value) ? value : "chapter";
|
||||
applyMode("zoom", nextValue, zoomValues);
|
||||
if (zoomSelect) {
|
||||
zoomSelect.value = nextValue;
|
||||
}
|
||||
localStorage.setItem(zoomKey, nextValue);
|
||||
};
|
||||
|
||||
const getScene = (sceneId) => root.querySelector(`[data-scene-id='${CSS.escape(String(sceneId))}']`);
|
||||
|
||||
const scrollToScene = (sceneId, focus = true) => {
|
||||
const target = getScene(sceneId);
|
||||
if (!target) {
|
||||
return;
|
||||
}
|
||||
|
||||
target.classList.add("keyboard-focus");
|
||||
target.scrollIntoView({ behavior: "smooth", block: "center", inline: "center" });
|
||||
if (focus) {
|
||||
target.focus({ preventScroll: true });
|
||||
}
|
||||
window.setTimeout(() => target.classList.remove("keyboard-focus"), 1800);
|
||||
};
|
||||
|
||||
const saveCollapsed = () => localStorage.setItem(collapsedKey, JSON.stringify([...collapsed]));
|
||||
|
||||
const setCollapsed = (id, shouldCollapse) => {
|
||||
document.querySelectorAll(`[data-collapse-body='${CSS.escape(id)}']`).forEach((body) => {
|
||||
body.classList.toggle("timeline-section-collapsed", shouldCollapse);
|
||||
});
|
||||
document.querySelectorAll(`[data-collapse-toggle='${CSS.escape(id)}']`).forEach((button) => {
|
||||
button.classList.toggle("is-collapsed", shouldCollapse);
|
||||
button.setAttribute("aria-expanded", String(!shouldCollapse));
|
||||
});
|
||||
};
|
||||
|
||||
document.querySelectorAll("[data-collapse-toggle]").forEach((button) => {
|
||||
const id = button.dataset.collapseToggle;
|
||||
const isCollapsed = collapsed.has(id);
|
||||
setCollapsed(id, isCollapsed);
|
||||
button.addEventListener("click", () => {
|
||||
const nextCollapsed = !collapsed.has(id);
|
||||
if (nextCollapsed) {
|
||||
collapsed.add(id);
|
||||
} else {
|
||||
collapsed.delete(id);
|
||||
}
|
||||
setCollapsed(id, nextCollapsed);
|
||||
saveCollapsed();
|
||||
});
|
||||
});
|
||||
|
||||
densitySelect?.addEventListener("change", () => applyDensity(densitySelect.value));
|
||||
zoomSelect?.addEventListener("change", () => applyZoom(zoomSelect.value));
|
||||
applyDensity(localStorage.getItem(densityKey) || "comfortable");
|
||||
applyZoom(localStorage.getItem(zoomKey) || "chapter");
|
||||
|
||||
const runSearch = () => {
|
||||
const query = searchInput?.value.trim().toLowerCase() || "";
|
||||
let firstMatch = null;
|
||||
sceneCards.forEach((card) => {
|
||||
const matches = !query || (card.dataset.timelineSearchText || "").toLowerCase().includes(query);
|
||||
card.classList.toggle("search-hit", Boolean(query && matches));
|
||||
card.classList.toggle("search-dim", Boolean(query && !matches));
|
||||
if (!firstMatch && query && matches) {
|
||||
firstMatch = card;
|
||||
}
|
||||
});
|
||||
return firstMatch;
|
||||
};
|
||||
|
||||
searchInput?.addEventListener("input", runSearch);
|
||||
searchInput?.addEventListener("keydown", (event) => {
|
||||
if (event.key !== "Enter") {
|
||||
return;
|
||||
}
|
||||
|
||||
const firstMatch = runSearch();
|
||||
if (firstMatch) {
|
||||
event.preventDefault();
|
||||
scrollToScene(firstMatch.dataset.sceneId);
|
||||
}
|
||||
});
|
||||
|
||||
jumpSelects.forEach((select) => {
|
||||
select.addEventListener("change", () => {
|
||||
if (select.value) {
|
||||
scrollToScene(select.value);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.querySelectorAll("[data-jump-scene]").forEach((button) => {
|
||||
button.addEventListener("click", () => {
|
||||
if (button.dataset.jumpScene) {
|
||||
scrollToScene(button.dataset.jumpScene);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
document.addEventListener("keydown", (event) => {
|
||||
const activeTag = document.activeElement?.tagName?.toLowerCase();
|
||||
const isTyping = ["input", "select", "textarea"].includes(activeTag) || document.activeElement?.isContentEditable;
|
||||
|
||||
if ((event.ctrlKey || event.metaKey) && event.key.toLowerCase() === "f" && searchInput) {
|
||||
event.preventDefault();
|
||||
searchInput.focus();
|
||||
searchInput.select();
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.key === "Escape") {
|
||||
const url = new URL(window.location.href);
|
||||
const hadFocus = url.searchParams.has("FocusType") || url.searchParams.has("FocusID");
|
||||
url.searchParams.delete("FocusType");
|
||||
url.searchParams.delete("FocusID");
|
||||
if (hadFocus) {
|
||||
window.location.href = url.toString();
|
||||
} else if (searchInput?.value) {
|
||||
searchInput.value = "";
|
||||
runSearch();
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
if (isTyping) {
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.key === "ArrowLeft" || event.key === "ArrowRight") {
|
||||
event.preventDefault();
|
||||
workspace.scrollBy({ left: event.key === "ArrowLeft" ? -260 : 260, behavior: "smooth" });
|
||||
return;
|
||||
}
|
||||
|
||||
if (event.key === "+" || event.key === "=" || event.key === "-") {
|
||||
const currentIndex = zoomValues.indexOf(zoomSelect?.value || "chapter");
|
||||
const direction = event.key === "-" ? -1 : 1;
|
||||
const nextIndex = Math.min(zoomValues.length - 1, Math.max(0, currentIndex + direction));
|
||||
applyZoom(zoomValues[nextIndex]);
|
||||
}
|
||||
});
|
||||
})();
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user