text:
<!DOCTYPE html>
<html>
<head>
  <title>Cisco Spark Widget Test</title>
  <meta charset="utf8">
  <style type="text/css">
    * {
      /*CSS transitions*/
      -webkit-transition: none !important;
      -moz-transition: none !important;
      -o-transition: none !important;
      -ms-transition: none !important;
      transition: none !important;
      /*CSS transition properties*/
      -webkit-transition-property: none !important;
      -moz-transition-property: none !important;
      -o-transition-property: none !important;
      -ms-transition-property: none !important;
      transition-property: none !important;
      /*CSS transforms*/
      -webkit-transform: none !important;
      -moz-transform: none !important;
      -o-transform: none !important;
      -ms-transform: none !important;
      transform: none !important;
      /*CSS animations*/
      -webkit-animation: none !important;
      -moz-animation: none !important;
      -o-animation: none !important;
      -ms-animation: none !important;
      animation: none !important;
  }
  </style>
  <link href="/dist-space/main.css" rel="stylesheet">
  <script src="/axe-core/axe.min.js"></script>
</head>
<body>
<div style="width: 500px; height: 500px">
  <main class="webex-widget"
    id="webex-widget">

</div>
<script src="/dist-space/bundle.js"></script>
<script>
  window.openSpaceWidget = function(options) {
    var widgetEl = document.getElementById('webex-widget');
    // Init a new widget
    webex.widget(widgetEl).spaceWidget(options);
  };
  window.ciscoSparkEvents = [];
</script>
</body>

</html>

redpajama_set_name: RedPajamaGithub


text:
#pragma once

#include "../test_common.h"

#include "dx/official/dxgi.h"
#include "d3d11_helpers.h"

#include "dx/official/d3dcompiler.h"

typedef HRESULT(WINAPI *pD3DStripShader)(_In_reads_bytes_(BytecodeLength) LPCVOID pShaderBytecode,
                                         _In_ SIZE_T BytecodeLength, _In_ UINT uStripFlags,
                                         _Out_ ID3DBlob **ppStrippedBlob);
typedef HRESULT(WINAPI *pD3DSetBlobPart)(_In_reads_bytes_(SrcDataSize) LPCVOID pSrcData,
                                         _In_ SIZE_T SrcDataSize, _In_ D3D_BLOB_PART Part,
                                         _In_ UINT Flags, _In_reads_bytes_(PartSize) LPCVOID pPart,
                                         _In_ SIZE_T PartSize, _Out_ ID3DBlob **ppNewShader);

struct Win32Window;

struct D3D11GraphicsTest : public GraphicsTest
{
  static const TestAPI API = TestAPI::D3D11;

  void Prepare(int argc, char **argv);
  bool Init(IDXGIAdapterPtr pAdapter = NULL);

  void Shutdown();
  GraphicsWindow *MakeWindow(int width, int height, const char *title);
  DXGI_SWAP_CHAIN_DESC MakeSwapchainDesc(GraphicsWindow *win);

  std::vector<IDXGIAdapterPtr> GetAdapters();

  HRESULT CreateDevice(IDXGIAdapterPtr adapterToTry, DXGI_SWAP_CHAIN_DESC *swapDesc,
                       D3D_FEATURE_LEVEL *features, UINT flags);
  void PostDeviceCreate();

  enum BufType
  {
    eCBuffer = 0x0,
    eStageBuffer = 0x1,
    eVBuffer = 0x2,
    eIBuffer = 0x4,
    eBuffer = 0x8,
    eCompBuffer = 0x10,
    eSOBuffer = 0x20,
    BufMajorType = 0xff,

    eAppend = 0x100,
    eRawBuffer = 0x200,
    BufUAVType = 0xf00,
  };

  ID3DBlobPtr Compile(std::string src, std::string entry, std::string profile,
                      bool skipoptimise = true);
  void Strip(ID3DBlobPtr &ptr);
  void WriteBlob(std::string name, ID3DBlobPtr blob, bool compress);

  ID3D11VertexShaderPtr CreateVS(ID3DBlobPtr blob);
  ID3D11PixelShaderPtr CreatePS(ID3DBlobPtr blob);
  ID3D11ComputeShaderPtr CreateCS(ID3DBlobPtr blob);
  ID3D11GeometryShaderPtr CreateGS(ID3DBlobPtr blob);
  ID3D11GeometryShaderPtr CreateGS(ID3DBlobPtr blob,
                                   const std::vector<D3D11_SO_DECLARATION_ENTRY> &sodecl,
                                   const std::vector<UINT> &strides, UINT rastStream = 0);

  void SetBlobPath(std::string name, ID3DBlobPtr &blob);
  void SetBlobPath(std::string name, ID3D11DeviceChild *shader);

  void CreateDefaultInputLayout(ID3DBlobPtr vsblob);

  D3D11BufferCreator MakeBuffer() { return D3D11BufferCreator(dev); }
  D3D11TextureCreator MakeTexture(DXGI_FORMAT format, UINT width)
  {
    return D3D11TextureCreator(dev, format, width, 1, 1);
  }
  D3D11TextureCreator MakeTexture(DXGI_FORMAT format, UINT width, UINT height)
  {
    return D3D11TextureCreator(dev, format, width, height, 1);
  }
  D3D11TextureCreator MakeTexture(DXGI_FORMAT format, UINT width, UINT height, UINT depth)
  {
    return D3D11TextureCreator(dev, format, width, height, depth);
  }

  D3D11SamplerCreator MakeSampler() { return D3D11SamplerCreator(dev); }
  template <typename T>
  D3D11ViewCreator MakeSRV(T res)
  {
    return D3D11ViewCreator(dev, ViewType::SRV, res);
  }
  template <typename T>
  D3D11ViewCreator MakeRTV(T res)
  {
    return D3D11ViewCreator(dev, ViewType::RTV, res);
  }
  template <typename T>
  D3D11ViewCreator MakeDSV(T res)
  {
    return D3D11ViewCreator(dev, ViewType::DSV, res);
  }
  template <typename T>
  D3D11ViewCreator MakeUAV(T res)
  {
    return D3D11ViewCreator(dev, ViewType::UAV, res);
  }

  std::vector<byte> GetBufferData(ID3D11Buffer *buf, uint32_t offset = 0, uint32_t len = 0);

  D3D11_MAPPED_SUBRESOURCE Map(ID3D11Resource *res, UINT sub, D3D11_MAP type)
  {
    D3D11_MAPPED_SUBRESOURCE mapped;
    ctx->Map(res, sub, type, 0, &mapped);
    return mapped;
  }

  struct VBBind
  {
    ID3D11Buffer *buf;
    UINT stride;
    UINT offset;
  };

  void IASetVertexBuffer(ID3D11Buffer *vb, UINT stride, UINT offset);

  void ClearRenderTargetView(ID3D11RenderTargetView *rt, Vec4f col);

  D3D11_RASTERIZER_DESC GetRasterState();
  void SetRasterState(const D3D11_RASTERIZER_DESC &desc);
  void RSSetViewport(D3D11_VIEWPORT view);
  void RSSetScissor(D3D11_RECT scissor);

  D3D11_DEPTH_STENCIL_DESC GetDepthState();
  void SetDepthState(const D3D11_DEPTH_STENCIL_DESC &desc);
  void SetStencilRef(UINT ref);

  bool Running();
  void Present();

  void pushMarker(const std::string &name);
  void setMarker(const std::string &name);
  void popMarker();

  void blitToSwap(ID3D11Texture2DPtr tex);

  DXGI_FORMAT backbufferFmt = DXGI_FORMAT_R8G8B8A8_UNORM_SRGB;
  int backbufferCount = 2;
  int backbufferMSAA = 1;
  D3D_FEATURE_LEVEL feature_level = D3D_FEATURE_LEVEL_11_0;
  UINT createFlags = 0;

  DXGI_ADAPTER_DESC adapterDesc = {};

  ID3D11VertexShaderPtr swapBlitVS;
  ID3D11PixelShaderPtr swapBlitPS;

  D3D11_FEATURE_DATA_D3D11_OPTIONS opts = {};
  D3D11_FEATURE_DATA_D3D11_OPTIONS1 opts1 = {};
  D3D11_FEATURE_DATA_D3D11_OPTIONS2 opts2 = {};

  ID3D11DepthStencilStatePtr depthState;
  ID3D11RasterizerStatePtr rastState;

  GraphicsWindow *mainWindow = NULL;

  IDXGIFactory1Ptr fact;
  IDXGISwapChainPtr swap;

  ID3D11InputLayoutPtr defaultLayout;

  ID3D11Texture2DPtr bbTex;
  ID3D11RenderTargetViewPtr bbRTV;

  ID3D11DevicePtr dev;
  ID3D11Device1Ptr dev1;
  ID3D11Device2Ptr dev2;
  ID3D11Device3Ptr dev3;
  ID3D11Device4Ptr dev4;
  ID3D11Device5Ptr dev5;

  ID3D11DeviceContextPtr ctx;
  ID3D11DeviceContext1Ptr ctx1;
  ID3D11DeviceContext2Ptr ctx2;
  ID3D11DeviceContext3Ptr ctx3;
  ID3D11DeviceContext4Ptr ctx4;
  ID3DUserDefinedAnnotationPtr annot;

private:
  static bool prepared_d3d11;
};


text:
Hercules Hoists Limited rebrands as BAJAJ INDEF after 60 years of Growth Journey
Dec 31, 2022 Business
New Delhi (India), December 31: There is a major announcement for Hercules Hoists Limited, a Bajaj Group company popularly known as Indef. It is primarily engaged in the manufacturing, sales, service, distribution, and marketing of mechanical hoists, electric chain hoists, wire rope hoists, cranes, and other material handling equipment.
Indef has undergone a change in the brand identity capitalizing the opportunity of bringing uniformity across all companies driven by Bajaj Group.
Talking about the same, the President & CEO, Mr. Amit Bhalla mentioned, "We're thrilled to unveil our fresh new brand identity. While this is a significant change, our fundamental convictions, such as customer needs being our first priority, ensuring best-in-class product quality & service support, and always delivering value driven by performance, have not altered and will only strengthen from here. Over the last few months, we have poured our hearts and souls into creating a new image that would accurately depict who we are, at our core as a team. With standard type, refined colors, and our most distinctive component, the logo, it will now have an enhanced professional, youthful, and assured new appearance."
From harboring a simple dream of becoming a provider of high-quality, truly Indian material handling solutions to becoming the national market leaders, Indef has journeyed far and long. Right from our incorporation in 1962 till the present day, innovation, excellence, service and customer focus have been some of the key pillars that have carried us thus far and we only aim to take this legacy forward.
Bajaj Indef is also an expression of Indef's strong foundation and long-term vision, which has been built over the last 60 years on the principles of integrity, honesty, transparency, and Bajaj Group's legacy of 96 years. The stability and trust that comes with this rich experience meshes perfectly with the brand's desire to always remain current in order to face changing times.
Together Bajaj Indef bridges the past and present and gives Indef a rich heritage, reflecting a sense of balance and continuity.
To sum up the article, we can say "Brand Indef is now Bajaj Indef". You can visit www.indef.com for more details about the company.
Shailendra Singh, Mithoon, Shaan, Jubin Nautiyal and Osman Mir to unveil a multilingual music video One India, My India 2.0 (Bhuj to Bengal), on 1st Jan
Shashi Tharoor's latest book Ambedkar: A Life launched at Kitaab Kolkata event draws bibliophiles young and old

redpajama_set_name: RedPajamaCommonCrawl


text:
Samuel L. Shapiro, Esq.
Sam brings 40 years of legal experience to our team. Sam is a senior partner at Kavinoky Cook LLP and has unique credentials as an expert in contracts, Health Care law and Business/Corporate law. He represents nursing homes, adult homes, senior housing facilities, independent practice associations, and physicians.
Sam understands the hospital workplace. From 2004-2009, Sam served the Erie County Medical Center Corporation as Vice Chairman and Board Member and also from 2007-2009 as Treasurer and Chairman of the Finance Committee. He has achieved the highest Martindale-Hubbell rating (AV) for legal ability and professional standards. He is included for 2010 and 2011 in the Best Lawyers in America for Health Care Law and Corporate Law, and also for 2010 in New York Super Lawyers. Sam, in 1999, received from the University at Buffalo Law Alumni Association, the Distinguished Alumni Award for Leadership by Example as a Private Practitioner.
Sam is available for legal consultation and strategic planning for contract negotiations, workplace issues and other areas that require legal expertise.
Linda Brodsky, MD
Steve Shaha, PhD, DBA
Analytics, Statistics, and Culture Change Agent
Lisa Charvat
Elaine C. Mosher BA, MLS
Physician Consultants
Channel V Media


In the recent years designers have started to examine the process of learning in relation to spatial qualities of a classroom. Research and application of non-traditional education spaces has revealed significant change in user behavior and overall teaching approaches. At arki_lab, we started to test out alternative spaces for education through creating outdoor classrooms in collaboration with students and teachers. One of our latest projects, Hans Tavsens Park, served as testing grounds for rethinking educational spaces.
Creating new urban spaces is as much about proposing a new user culture as it is about good design. Successful design, without collaboration with end-users, is capable of encouraging certain user behavior through spatial elements. However plenty of desolated and unused urban spaces indicate that there's still a lack in including the end-users in the design process. Citizen involvement and participation make it possible for local knowledge and experience to be taken into account during the design and build process. At the same time it gives the users a sense of ownership over the new spaces, making it more likely to succeed after being built. This becomes particularly important when experimenting with alternative use of spases as we did in our recently finished project with three classes from the district Nørrebro in Copenhagen. We explored possible ways of creating outdoor learning environments in Hans Tavsens Park.
Outdoor education challenges the traditional way of classroom teaching in various ways. In Nørrebro we investigated different ways spatial design might support outdoor education, examining the relationship between design and education: What kind of boundaries are necessary to establish an outdoor "classroom" and which artifacts might be useful in a teaching situation with a lot of unknown external factors such as weather, traffic and other distractions?
One significant finding during our project was that when people were asked to imagine an outdoor teaching situation in most cases they simply reiterated the traditional classroom setup with blackboard, chairs and tables, simply moving the furniture outside. This illustrates that spatial design constitutes for more than just building a new construct but it absolutely has to engage the users in order to create a new culture of use together.
In this case it isn't only the teachers and students who have to learn how to do adapt to outdoor classes. It also poses a challenge for the school's administrative staff and lawmakers, putting the designers in a unique position. In the process of designing urban spaces, for outdoor education, we must work both as designers and researchers, striving to create the necessary connections and relationships among the different stakeholders.
The project in Hans Tavsens Park proves that changing the culture of use through spatial design is possible. The teachers were inspired to include more outdoor classes in their curriculum, while the students started reflecting on how this new space could enhance their learning process.
Architects from SLA, who are in charge of the renovation in Hans Tavsens Park, were invited to take part in our project. Inspired by our end-user oriented design process, they incorporated possible outdoor education spaces in their design. One of the most critical and difficult parts about designing with citizens is the utilization of collected data from end-users. Plenty of the local knowledge and ideas get lost in translation during the final design process. We, at arki_lab, serve a mediators ensuring that the core values of citizens ideas are always central to the design and build process.
There's plenty to learn from exploring new ways of outdoor education. Studies show that students have an easier time remembering what they've learned, when they're provided with multiple learning methods.
Outdoor classes might also help with the lack of space and overpopulation in city center schools. Furthermore exploring outdoor education options opens further conversations about the overall education system and what learning/teaching should value.
The fact that people have such a difficult time imagining a non-traditional classroom setting points out that alternative learning spaces won't easily become the status quo. Yet it necessary for educational space design to adapt and change over time. One thing we think as paramount to education is the ability to take an active part in the community. Successfully designed outdoor education has the prospect to do just that. Flexible boundaries and adaptable spaces create an increased responsibility in students for their own learning, all the while being adjustable for future uses yet to be discovered.
We collected our outdoor classroom design workshops in Blågård school and Nørrebro Park School in a short video. The collaborative process with students and teachers in Nørrebro influenced the Hans Tavsens Park project, aiming to involve end-user ideas and visions.
Udeskole i Københavns Kommune from Julie Blicher Trojaborg on Vimeo.


Harith al Nadhari recorded an audio eulogy for Mohammed al Zahawi, the leader of Ansar al Sharia Libya, shortly before his own death.
Nadhari's audio recording, which was released via Twitter on Feb. 6, has been translated by the SITE Intelligence Group.
Like other Ansar al Sharia leaders in Egypt, Libya and Tunisia, Zahawi had an al Qaeda pedigree. In Yemen, Ansar al Sharia is merely a front for AQAP.
Zahawi's meeting with bin Laden in the 1990s is a strong indication that he had long operated within al Qaeda's network. His dossier since then buttresses the point.
Nadhari also offered a call for jihadist unity in Libya, saying that the mission was not completed when Qaddafi fell. Some of Nadhari's audio message appears to implicitly address the infighting between the Islamic State's supporters in Libya and the jihadists in Ansar al Sharia and other groups who refuse to swear allegiance to Abu Bakr al Baghdadi.
AQAP is not the only official branch of al Qaeda to mourn Zahawi. Al Qaeda in the Islamic Maghreb (AQIM) issued its own eulogy for the deceased Ansar al Sharia Libya leader online.
In the aftermath of the Sept. 11, 2012 terrorist attack in Benghazi, Libya, a popular meme held that Ansar al Sharia was just a "local" jihadist group and was not part of al Qaeda's international network. Abundant evidence at the time indicated that this was false.
For instance, a report published in August 2012 by the Library of Congress and the Defense Department's Combating Terrorism Technical Support Office (CTTSO), "Al Qaeda in Libya: A Profile," connected Ansar al Sharia to al Qaeda's clandestine network inside Libya. The report's authors pointed out that one prominent Ansar al Sharia leader in Derna, Sufian Ben Qumu, is an ex-Guantanamo detainee who served as an al Qaeda operative before his detention by US forces. Other facts demonstrated Ansar al Sharia's ties to al Qaeda as well.
Ironically enough, the participation of Ansar al Sharia fighters in the 9/11/12 Benghazi attack was itself an indication that the group was, at a minimum, colluding with various al Qaeda branches. At least three other al Qaeda groups took part in the raid on the US Mission and Annex that night. Jihadists from both AQAP and AQIM were involved in the assault, as were members of the so-called Muhammad Jamal Network (MJN). AQAP and AQIM are formal branches of al Qaeda, while the MJN was led by an Egyptian who was first trained by al Qaeda in the late 1980s and had long been a subordinate to Ayman al Zawahiri.
Ansar al Sharia's role in al Qaeda's global network was eventually recognized by the United Nations's Security Council, which added the group to its al Qaeda sanctions list in November 2014. The UN did not directly sanction Zahawi, but did identify him as Ansar al Sharia's leader in Benghazi. The UN also noted that Ansar al Sharia in Benghazi works closely with AQIM and Al Mourabitoun, an AQIM offshoot that remains loyal to Ayman al Zawahiri.
Is it odd that al qaeda wanted the Qaddafi regime toppled, and barack hussein obama obliged them?


Please come and help clear-up and tidy-up the churchyard this Saturday.
If you can bring any garden tools with you such as shears, secateurs, rake etc and garden gloves, that would be great.
This week the theme is Mark 10, He Turns our World Values Upside-down, with a reading of Mark 10:17-31 . The questions are: Is prosperity a sign of God's blessing? And what would you find hardest of all to give up?
Junior Church is NOT on.
The office will be closed 27th-31st October. If there is an emergency please contact the Church Wardens. Any administrative work/requests can be sent in earlier otherwise they will be dealt with when the administrator returns on the 3rd of November. Apologies for any inconvenience caused.
This week the theme is Mark 8, Jesus is the Messiah, with a reading of Mark 8: 27-38. The questions are: Was Peter angry with Jesus? And why are we asked to deny ourselves for the sake of the Gospel?


Help me, Obi-Wan LJ! You're my only hope!
You guys have been stellar about helping me on various things before, so I'm hoping you can do it again now.
For yet another of our proposals, I'm trying to find a diagram/really good set of pictures of the Carriage, Stream, Tow, and Recovery System (CSTRS) for sonar and related airborned mine countermeasures operations, operating from the MH-60S. I've got calls into Odim and CTC who work on the system, which you can see something about here, but multiple google attempts with multiple different search terms have given me just a few pictures which are not clear enough for me to really understand how the thing works. This makes it very difficult to figure out which parts I need to monitor to keep them properly running.


PlumbersNearYou.com provides updated information on plumber service in Middleburg, FL.
Learn more about a Middleburg plumber by clicking "view details," or enter a new zip code in the search box below to search again.
Your Local Plumbing Experts 100% Satisfaction Guaranteed Call NOW For A Free Estimate!


text:
La 38.ª edición de la competición ciclista Vuelta a Burgos se celebró en España entre el 2 y el 6 de agosto de 2016 sobre un recorrido de 674,72 kilómetros dividido en 5 etapas, con inicio en Sasamón y final en las Lagunas de Neila.

La prueba hizo parte del UCI Europe Tour 2016 dentro de la categoría 2.HC (máxima categoría de estos circuitos).

La carrera fue ganada por el corredor Alberto Contador del equipo Tinkoff, en segundo lugar Ben Hermans (BMC Racing Team) y en tercer lugar Sergio Pardilla (Caja Rural-Seguros RGA).

Equipos participantes
Tomaron parte en la carrera 21 equipos: 13 de categoría UCI ProTeam invitados por la organización; 6 de categoría Profesional Continental; y 2 de categoría Continental. Formando así un pelotón de 164 ciclistas de los que acabaron 132. Los equipos participantes fueron:

Etapas
La Vuelta a Burgos dispuso de cinco etapas para un recorrido total de 674,72 kilómetros.

Etapa 1

Etapa 2

Etapa 3

Etapa 4

Etapa 5

Clasificaciones finales
 Las clasificaciones finalizaron de la siguiente forma:

Clasificación general

Clasificación de la montaña

Clasificación por puntos

Clasificación del mejor joven

Clasificación por equipos

Evolución de las clasificaciones
{| class="wikitable" style="text-align: center; font-size:smaller;"
|-
!width="12%"| Etapa (Vencedor)
!style="background-color:violet;" width="15%"| Clasificación general!style="background-color:red;" width="15%"| Clasificación de la montaña
!style="background-color:limegreen;" width="15%"| Clasificación por puntos
!style="background:dodgerblue;" width="15%"| Clasificación del mejor joven
!style="background:orange;" width="15%"| Clasificación por equipos
|-
| 1.ª etapa  (Danny van Poppel)
| style="background:#F799A0;" rowspan="1"| Danny van Poppel
| style="background:#FF8666;" rowspan="2"| Martijn Tusveld
| style="background:lightgreen;" rowspan="5"| Danny van Poppel
| style="background:Skyblue;" rowspan="2"| Pablo Torres
| style="background:navajowhite;" rowspan="1"| BMC Racing
|-
| 2.ª etapa (CRE)  (Astana)
| style="background:#F799A0;" rowspan="2"| Dmitriy Gruzdev
| style="background:navajowhite;" rowspan="3"| Astana
|-
| 3.ª etapa (Danny van Poppel)
| style="background:#FF8666;" rowspan="1"| Jochem Hoekstra
| style="background:skyblue;" rowspan="2"| Eneko Lizarralde
|-
| 4.ª etapa (Nathan Haas)
| style="background:#F799A0;" rowspan="1"| Gianni Meersman
| style="background:#FF8666;" rowspan="1"|  Jacques Janse Van Rensburg
|-
| 5.ª etapa  (Sergio Pardilla)
| style="background:#F799A0;" rowspan="1"|  Alberto Contador
| style="background:#FF8666;" rowspan="1"| Omar Fraile
| style="background:skyblue;" rowspan="1"| Matvey Mamykin
| style="background:navajowhite;" rowspan="1"|  Movistar Team
|-
|Final
|style="background:violet;" width="15%"| Alberto Contador|style="background:red;" width="15%"| Omar Fraile|style="background:limegreen;" width="15%"| Danny van Poppel
|style="background:dodgerblue;" width="15%"| Matvey Mamykin|style="background:orange;" width="15%"| Movistar Team'|}

 UCI Europe Tour
La Vuelta a Burgos otorga puntos para el UCI Europe Tour 2016, para corredores de equipos en las categorías UCI ProTeam, Profesional Continental y Equipos Continentales. La siguiente tabla corresponde al baremo de puntuación:

Además, también otorgó puntos para el UCI World Ranking (clasificación global de todas las carreras internacionales).

 Referencias

 Enlaces externos

 Página oficial
 Libro de ruta
 Vuelta a Burgos 2016 procyclingstats.com''

2016
UCI Europe Tour 2016
Ciclismo en España en 2016

redpajama_set_name: RedPajamaWikipedia


text:
package pipeline

import (
	"fmt"
	"context"

	"go-common/app/service/ops/log-agent/output/lancerlogstream"
	"go-common/app/service/ops/log-agent/output/lancergrpc"
	"go-common/app/service/ops/log-agent/input/sock"
	"go-common/app/service/ops/log-agent/input/file"
	"go-common/app/service/ops/log-agent/processor/classify"
	"go-common/app/service/ops/log-agent/processor/jsonLog"
	"go-common/app/service/ops/log-agent/processor/fileLog"
	"go-common/app/service/ops/log-agent/processor/lengthCheck"
	"go-common/app/service/ops/log-agent/processor/sample"
	"go-common/app/service/ops/log-agent/processor/httpstream"
	"go-common/app/service/ops/log-agent/processor/grok"
	"go-common/app/service/ops/log-agent/output/stdout"
	"go-common/library/log"

	"github.com/BurntSushi/toml"
)

var inputConfigDecodeFactory = make(map[string]configDecodeFunc)
var processorConfigDecodeFactory = make(map[string]configDecodeFunc)
var outputConfigDecodeFactory = make(map[string]configDecodeFunc)

func init() {
	RegisterInputConfigDecodeFunc("sock", sock.DecodeConfig)
	RegisterInputConfigDecodeFunc("file", file.DecodeConfig)
	RegisterProcessorConfigDecodeFunc("classify", classify.DecodeConfig)
	RegisterProcessorConfigDecodeFunc("jsonLog", jsonLog.DecodeConfig)
	RegisterProcessorConfigDecodeFunc("lengthCheck", lengthCheck.DecodeConfig)
	RegisterProcessorConfigDecodeFunc("sample", sample.DecodeConfig)
	RegisterProcessorConfigDecodeFunc("httpStream", httpstream.DecodeConfig)
	RegisterProcessorConfigDecodeFunc("fileLog", fileLog.DecodeConfig)
	RegisterProcessorConfigDecodeFunc("grok", grok.DecodeConfig)
	RegisterOutputConfigDecodeFunc("stdout", stdout.DecodeConfig)
	RegisterOutputConfigDecodeFunc("lancer", lancerlogstream.DecodeConfig)
	RegisterOutputConfigDecodeFunc("lancergrpc", lancergrpc.DecodeConfig)
}

type Pipeline struct {
	c          *Config
	ctx        context.Context
	cancel     context.CancelFunc
	configPath string
	configMd5  string
}

type Config struct {
	Input     ConfigItem            `toml:"input"`
	Processor map[string]ConfigItem `toml:"processor"`
	Output    map[string]ConfigItem `toml:"output"`
}

type ConfigItem struct {
	Name   string         `toml:"type"`
	Config toml.Primitive `toml:"config"`
}

func (pipe *Pipeline) Stop() {
	pipe.cancel()
}

type configDecodeFunc = func(md toml.MetaData, primValue toml.Primitive) (c interface{}, err error)

func RegisterInputConfigDecodeFunc(name string, f configDecodeFunc) {
	inputConfigDecodeFactory[name] = f
}

func RegisterProcessorConfigDecodeFunc(name string, f configDecodeFunc) {
	processorConfigDecodeFactory[name] = f
}

func GetInputConfigDecodeFunc(name string) (f configDecodeFunc, err error) {
	if f, exist := inputConfigDecodeFactory[name]; exist {
		return f, nil
	}
	return nil, fmt.Errorf("InputConfigDecodeFunc for %s not exist", name)
}

func GetProcessorConfigDecodeFunc(name string) (f configDecodeFunc, err error) {
	if f, exist := processorConfigDecodeFactory[name]; exist {
		return f, nil
	}
	return nil, fmt.Errorf("ProcessorConfigDecodeFunc for %s not exist", name)
}

func DecodeInputConfig(name string, md toml.MetaData, primValue toml.Primitive) (c interface{}, err error) {
	dFunc, err := GetInputConfigDecodeFunc(name)
	if err != nil {
		return nil, err
	}
	return dFunc(md, primValue)
}

func DecodeProcessorConfig(name string, md toml.MetaData, primValue toml.Primitive) (c interface{}, err error) {
	dFunc, err := GetProcessorConfigDecodeFunc(name)
	if err != nil {
		return nil, err
	}
	return dFunc(md, primValue)
}

func RegisterOutputConfigDecodeFunc(name string, f configDecodeFunc) {
	outputConfigDecodeFactory[name] = f
}

func GetOutputConfigDecodeFunc(name string) (f configDecodeFunc, err error) {
	if f, exist := outputConfigDecodeFactory[name]; exist {
		return f, nil
	}
	return nil, fmt.Errorf("OutputConfigDecodeFunc for %s not exist", name)
}

func DecodeOutputConfig(name string, md toml.MetaData, primValue toml.Primitive) (c interface{}, err error) {
	dFunc, err := GetOutputConfigDecodeFunc(name)
	if err != nil {
		return nil, err
	}
	return dFunc(md, primValue)
}

func (p *Pipeline) logError(err error) {
	configPath := p.ctx.Value("configPath")
	log.Error("failed to run pipeline for %s: %s", configPath, err)
}


Dungeon Siege is highly cool. There's no doubting that. I still keep having this nagging feeling like it's just evolutionary though, and not revolutionary. Truth be told, if Blizzard killed the Diablo franchise right here, I'd be more than happy to consider this title to be an honorary Diablo 3. It plays exactly like I would expect Diablo 3 to, and has many new features and customization options that address and supercede many of the play issues brought about by the first two titles.
The underlying purpose of the whole shebang is, of course, for it to be fun, and it certainly excels at that. Great efforts were put into ergonomics and playability of this game to make it a hack-and-slash that almost anyone can enjoy. And you most likely will�provided that your computer is up to the task.


Deer Season ammunition combines Winchester's extensive experience into a product engineered specifically for deer hunters. The Deer Season slug utilizes a rear stabilized wad that travels downrange with the slug to improve accuracy through all shotguns. Improved accuracy means clean kills, extreme knockdown, and blood trails measured in feet ... not yards.